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 (13) Run this test again Return to test menu

Result: Discarded

The test labeled "non-blocking" was the faster by 0.0095 seconds, (1.317% faster)

non-blocking 100%
blocking 98.683%

The non-blocking test took 0.7117 seconds.
The blocking test took 0.7212 seconds.

Nitty-Gritty

Each test case ran 20 random code order iterations consisting of 174,109 loops for a total of 3,482,180 runs.

  • Line execution difference (0.000003) milliseconds.
  • Avg difference (0.475) milliseconds per 174,109 loops.
  • Total difference 9.50 milliseconds for 3,482,180 loops

The iteration variablity for Code 1 was (2.5086) milliseconds and Code 2 was (1.6709) 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.15-1+ubuntu16.04.1+deb.sury.org+1)