ID: 32806
Comment by: scottij at arbor dot net
Reported By: peoned at yahoo dot com
Status: No Feedback
Bug Type: Performance problem
Operating System: Linux
PHP Version: 5.0.4
Assigned To: wez
New Comment:
I'm getting similar behavior with php 5.2.1.
I am reading about 5,000 lines over a tcp socket to another program on
the localhost (NOT over a network). Initially, it takes about 500 us
per line of text (where the lines are < 20 characters long). Here is
the code snippet and output:
while (/* some eof and timeout checks here */) {
$rstart = microtime(TRUE);
$str = fgets($this->dataSocket, 8096);
$rstop = microtime(TRUE);
$rdiff = $rstop - $rstart;
print("read took $rdiff secs.<br>\n");
print("str = $str<br>\n");
}
This yields, for example:
str = 16549|Item2250||3|2|
read took 0.00049185752868652 secs.
str = 16550|Item2251||3|2|
read took 0.00049495697021484 secs.
str = 16551|Blob2252||3|2|
read took 0.00049018859863281 secs.
I run that over a full dump of my text (5000 lines).
If I then close the socket, open a new one, and do the same operation,
about halfway through the fgets() times start increasing dramatically:
str = 16645|Item2346||3|2|
read took 0.0019731521606445 secs.
str = 16646|Item2347||3|2|
read took 0.0019690990447998 secs.
str = 16647|Item2348||3|2|
read took 0.0020229816436768 secs.
2 ms to read each short line?? Again, this is just over a local
socket, nothing over the network.
This is reproducible every time on my system.
Thanks.
Previous Comments:
------------------------------------------------------------------------
[2005-11-11 01:00:23] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
------------------------------------------------------------------------
[2005-11-03 22:45:44] [EMAIL PROTECTED]
Please try using this CVS snapshot:
http://snaps.php.net/php5-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php5-win32-latest.zip
------------------------------------------------------------------------
[2005-05-04 23:24:07] peoned at yahoo dot com
without fwrite() it is significantly faster, gives about 5-6 seconds.
But in Perl without print OUT $_; it gives around 1-2 seconds. So it is
still slower in PHP because of fgets().
------------------------------------------------------------------------
[2005-05-02 14:25:11] [EMAIL PROTECTED]
Can you try your tests with the fwrite() line commented out?
------------------------------------------------------------------------
[2005-04-28 07:30:31] peoned at yahoo dot com
I did an
`echo strlen($line).",";`
Here are the lengths for some of the first few lines:
42,7,18,11,71,13,8,7,42,7,20,11,73,70,68,63,13,8,7
It looks pretty much like this for the rest of the file. Lines between
1 and 100 chars in length.
Note: It isn't the start up cost for sure because I measured the time
just around the while loop with the same results.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/32806
--
Edit this bug report at http://bugs.php.net/?id=32806&edit=1