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

Result: Discarded

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

non-blocking 100%
blocking 97.368%

The non-blocking test took 0.5178 seconds.
The blocking test took 0.5318 seconds.

Nitty-Gritty

Each test case ran 20 random code order iterations consisting of 139,010 loops for a total of 2,780,200 runs.

  • Line execution difference (0.000005) milliseconds.
  • Avg difference (0.700) milliseconds per 139,010 loops.
  • Total difference 14.00 milliseconds for 2,780,200 loops

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