PHP Benchmarks

Performance comparison of PHP code alternatives.

Test: sockets blocking vs. not

Normal sockets in PHP are blocking. Does using a select manually improve things for just a single socket? Note this test depends on external things, and so is fairly inaccurate.

View test history (1) Run this test again Return to test menu

Result: Discarded

The test labeled "blocking" was the faster by 0.0094 seconds, (1.552% faster)

blocking 100%
non-blocking 98.448%

The blocking test took 0.5954 seconds.
The non-blocking test took 0.6048 seconds.

Nitty-Gritty

Each test case ran 20 random code order iterations consisting of 151,105 loops for a total of 3,022,100 runs.

  • Line execution difference (0.000003) milliseconds.
  • Avg difference (0.469) milliseconds per 151,105 loops.
  • Total difference 9.39 milliseconds for 3,022,100 loops

The iteration variablity for Code 1 was (2.7512) milliseconds and Code 2 was (2.5309) milliseconds. The lower and the closer together there values are the more accurate the results are.

Code

The first test, "blocking", was:

$fp = fsockopen('127.0.0.1', 80, $errno, $error);
fwrite($fp,
	'GET / HTTP/1.1' . "\r\n" .
	'Host: localhost' . "\r\n\r\n");

$GLOBALS['dummy2'] = fread($fp, 100);
fclose($fp);

The second test, "non-blocking", was:

$fp = fsockopen('127.0.0.1', 80, $errno, $error);
stream_set_blocking($fp, false);

$r = array($fp);
$w = array($fp);
$e = array();

if (stream_select($e, $w, $e, 2))
	fwrite($fp,
	'GET / HTTP/1.1' . "\r\n" .
	'Host: localhost' . "\r\n\r\n");

if (stream_select($r, $e, $e, 2))
	$GLOBALS['dummy2'] = fread($fp, 100);

fclose($fp);

Running: Linux (x86_64:1 GB) PHP (7.2.25-1+ubuntu16.04.1+deb.sury.org+1)