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: Saved

The test labeled "blocking" was the faster by 0.0199 seconds, (3.273% faster)

blocking 100%
non-blocking 96.727%

The blocking test took 0.5881 seconds.
The non-blocking test took 0.608 seconds.

Nitty-Gritty

Each test case ran 20 random code order iterations consisting of 150,252 loops for a total of 3,005,040 runs.

  • Line execution difference (0.000007) milliseconds.
  • Avg difference (0.995) milliseconds per 150,252 loops.
  • Total difference 19.90 milliseconds for 3,005,040 loops

The iteration variablity for Code 1 was (3.8985) milliseconds and Code 2 was (4.0431) 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)