3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Operation { protected $routine; protected $promise; public function __construct(\Closure $routine, $promise) { $this->routine = $routine; $this->promise = $promise; } public function run() { $routine = $this->routine(); $routine($this->promise); } public function getPromise() { return $this->promise; } } class Promise { protected $successClosure; protected $failClosure; public function fulfill(...$args) { $closure = $this->successClosure; $closure(...$args); } public function reject(...$args) { $closure = $this->failClosure; $closure(...$args); } public function then(\Closure $success, \Closure $fail) { $this->successClosure = $success; $this->failClosure = $fail; } } class Queue { protected $queue = []; public function append(Operation $operation) { $this->queue[] = $operation; } public function getOperationGenerator() { foreach ($this->queue as $operation) { yield $operation; } } } class QueueHandler { protected $queues = []; public function addQueue($handle, Queue $queue) { $this->queues[$handle] = $queue; } public function getQueue($handle, $defualt=null) { return isset($this->queues[$handle]) ? $this->queues[$handle] : $default; } protected function getOperationGenerator() { $queues = []; foreach ($this->queues as $queue) { $queues[] = $queue->getOperationGenerator(); } foreach ($queues as $queue) { yield from $queue; } } protected function getRunGenerator() { $operation_generator = $this->getOperationGenerator(); foreach ($operation_generator as $operation) { yield $operation; } } public function run() { $generator = $this->getRunGenerator(); foreach ($generator as $operation) { $operation->run(); } } } function addOperation(\Closure $routine, Queue $queue) { $promise = new Promise(); $operation = new Operation($routine, $promise); $queue->append($operation); return $promise; } $queue_handler = new QueueHandler(); $queue_handler->addQueue('main', new Queue()); $queue_handler->addQueue('secondary', new Queue()); $runtime = function(Promise $promise) use ($queue_handler) { $handle_request = function(Promise $promise) { var_dump('handled request'); $promise->fulfill(); }; $request_promise = addOperation($handle_request, $queue_handler->getQueue('secondary')); $request_promise->then(function() { die('Regular shutdown'); }, function() { die('Error!'); }); }; addOperation($runtime, $queue_handler->getQueue('main')); $queue_handler->run();

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0150.00618.68
8.3.50.0210.00016.50
8.3.40.0060.01618.96
8.3.30.0150.00018.82
8.3.20.0030.00620.14
8.3.10.0040.00421.91
8.3.00.0060.00320.19
8.2.180.0000.01518.54
8.2.170.0060.00922.96
8.2.160.0030.01621.91
8.2.150.0040.00424.18
8.2.140.0040.00424.66
8.2.130.0030.01526.16
8.2.120.0030.00617.63
8.2.110.0000.01019.15
8.2.100.0070.00717.88
8.2.90.0040.00419.21
8.2.80.0040.00417.97
8.2.70.0030.00617.75
8.2.60.0000.00818.05
8.2.50.0080.00018.07
8.2.40.0050.00519.36
8.2.30.0060.00320.53
8.2.20.0000.00817.83
8.2.10.0000.00818.20
8.2.00.0000.00818.06
8.1.280.0090.00925.92
8.1.270.0000.00823.88
8.1.260.0120.00326.35
8.1.250.0130.00728.09
8.1.240.0090.00023.88
8.1.230.0110.00017.79
8.1.220.0040.00417.74
8.1.210.0000.00818.77
8.1.200.0060.00317.36
8.1.190.0000.00817.35
8.1.180.0050.00318.10
8.1.170.0060.00618.60
8.1.160.0030.00522.05
8.1.150.0070.00018.92
8.1.140.0050.00517.48
8.1.130.0070.00017.78
8.1.120.0030.00317.54
8.1.110.0090.00317.44
8.1.100.0000.01017.49
8.1.90.0040.00417.47
8.1.80.0040.00417.38
8.1.70.0040.00417.38
8.1.60.0000.00817.63
8.1.50.0000.00817.45
8.1.40.0030.00617.54
8.1.30.0030.00517.73
8.1.20.0040.00417.59
8.1.10.0000.00817.57
8.1.00.0030.00517.54
8.0.300.0050.00318.77
8.0.290.0050.00216.63
8.0.280.0050.00318.49
8.0.270.0030.00317.21
8.0.260.0000.00817.30
8.0.250.0000.00817.09
8.0.240.0070.00017.10
8.0.230.0000.00716.91
8.0.220.0040.00416.88
8.0.210.0000.00716.98
8.0.200.0040.00417.04
8.0.190.0000.00816.98
8.0.180.0000.00816.89
8.0.170.0050.00317.02
8.0.160.0000.00817.09
8.0.150.0030.00316.93
8.0.140.0040.00416.84
8.0.130.0050.00213.43
8.0.120.0060.00316.84
8.0.110.0000.00716.97
8.0.100.0000.00716.86
8.0.90.0040.00417.00
8.0.80.0060.00916.91
8.0.70.0000.00816.88
8.0.60.0040.00416.79
8.0.50.0050.00216.88
8.0.30.0080.01217.26
8.0.20.0110.00817.43
8.0.10.0040.00417.17
8.0.00.0080.00917.00
7.4.330.0020.00215.09
7.4.320.0030.00316.49
7.4.300.0030.00316.56
7.4.290.0070.00016.49
7.4.280.0040.00416.49
7.4.270.0070.00016.55
7.4.260.0070.00016.67
7.4.250.0050.00316.50
7.4.240.0060.00116.59
7.4.230.0040.00416.55
7.4.220.0160.00616.66
7.4.210.0110.00416.67
7.4.200.0070.00016.45
7.4.160.0110.00616.61
7.4.150.0080.00817.40
7.4.140.0140.00817.86
7.4.130.0120.00616.68
7.4.120.0070.01016.59
7.4.110.0030.01616.54
7.4.100.0090.01216.55
7.4.90.0110.00816.60
7.4.80.0060.01219.39
7.4.70.0090.01316.51
7.4.60.0130.00316.53
7.4.50.0040.00416.43
7.4.40.0060.00916.66
7.4.30.0150.00716.54
7.4.00.0040.01214.92
7.3.330.0050.00013.50
7.3.320.0030.00313.56
7.3.310.0040.00416.50
7.3.300.0030.00316.47
7.3.290.0090.00716.44
7.3.280.0090.00816.49
7.3.270.0100.00717.40
7.3.260.0140.00416.52
7.3.250.0100.00716.62
7.3.240.0160.00816.50
7.3.230.0130.01016.46
7.3.210.0070.01616.52
7.3.200.0110.01416.51
7.3.190.0060.00916.42
7.3.180.0070.01016.68
7.3.170.0120.00916.49
7.3.160.0180.00316.46
7.2.330.0140.00316.52
7.2.320.0130.00316.76
7.2.310.0090.01216.73
7.2.300.0110.00616.50
7.2.290.0120.00616.82
7.2.60.0000.01116.66
7.2.00.0040.00819.41
7.1.200.0060.00315.92
7.1.100.0040.00818.14
7.1.70.0060.01017.17
7.1.60.0150.00919.11
7.1.50.0100.01416.68
7.1.00.0100.07022.36
7.0.200.0050.00316.68
7.0.60.0170.06319.98
7.0.50.0170.07017.91
7.0.40.0070.04320.23
7.0.30.0270.07720.15
7.0.20.0400.05020.23
7.0.10.0030.07020.21
7.0.00.0070.08720.19
5.6.280.0000.07720.93
5.6.210.0130.06720.51
5.6.200.0100.04718.21
5.6.190.0100.04020.46
5.6.180.0400.05720.48
5.6.170.0370.07320.48
5.6.160.0070.05320.47
5.6.150.0070.08318.15
5.6.140.0100.08018.17
5.6.130.0030.04018.12
5.6.120.0030.08721.01
5.6.110.0070.04021.07
5.6.100.0070.08321.00
5.6.90.0070.08321.10
5.6.80.0170.07320.30
5.5.350.0230.08020.45
5.5.340.0130.07017.99
5.5.330.0030.09020.19
5.5.320.0270.06320.35
5.5.310.0300.04320.42
5.5.300.0130.07318.07
5.5.290.0170.07318.05
5.5.280.0100.03720.75
5.5.270.0100.07720.89
5.5.260.0070.04020.88
5.5.250.0030.04320.79
5.5.240.0370.05720.25
5.4.450.0430.07319.39
5.4.440.0370.06319.42
5.4.430.0470.07019.16
5.4.420.0470.05319.39
5.4.410.0400.05319.45
5.4.400.0370.06719.23
5.4.390.0230.05719.21
5.4.380.0270.05318.94
5.4.370.0270.05019.30
5.4.360.0300.06319.21
5.4.350.0200.06019.23
5.4.340.0230.05719.26
5.4.320.0200.05718.88
5.4.310.0230.05719.10
5.4.300.0330.05019.09
5.4.290.0270.05319.26
5.4.280.0270.05319.10
5.4.270.0200.05719.05
5.4.260.0230.05019.09
5.4.250.0230.07018.83
5.4.240.0330.06018.86
5.4.230.0170.07719.10
5.4.220.0330.06719.09
5.4.210.0270.07319.25
5.4.200.0370.04719.22
5.4.190.0370.06018.86
5.4.180.0330.04319.07
5.4.170.0170.06019.09
5.4.160.0200.05719.24
5.4.150.0170.05718.98
5.4.140.0130.06016.54
5.4.130.0170.05316.48
5.4.120.0300.04316.34
5.4.110.0200.05316.35
5.4.100.0230.04716.50
5.4.90.0400.03716.61
5.4.80.0400.05716.51
5.4.70.0300.06016.39
5.4.60.0070.06316.43
5.4.50.0030.07316.16
5.4.40.0070.05016.35
5.4.30.0330.05016.22
5.4.20.0200.07716.32

preferences:
43.52 ms | 400 KiB | 5 Q