@ 2018-03-11T04:39:21Z <?php
// Calling it supervisor because it maintains an internal state,
// Receiver because it receives messages.
$supervisor = makeReceiver(); // ...(243) The internal id, optional
// Now we're messaging into that state. Here, we're passing commands.
$supervisor->send(['addUser','amy']);
$supervisor->send(['addUser','bob']);
$supervisor->send(['addUser','ellen']);
$supervisor->send(['addUser','joe']);
$supervisor->send(['addUser','mark']);
$supervisor->send(['addUser','janice']); // Nope
$supervisor->send(['addUser','franke']); // Sorry, too many
// This is a pointer to what's been yielded in the generator.
// It is now an Iterator (next, rewind).
$users = $supervisor->send(_m('iterator'));
function _m($message) {
return [$message, null];
}
foreach($users as $user) {
echo "User is `$user`.".PHP_EOL;
}
// This tells it to hari-kari.
var_dump($supervisor->send(['SIGHUP', $supervisor]));
$supervisor2 = makeReceiver(null, ['eduardo','paul','simon',]);
$supervisor2->send(['addUser','ellen']);
$supervisor2->send(['addUser','joe']);
$users2 = $supervisor2->send(_m('iterator'));
foreach($users2 as $user2) {
echo "User2 is `$user2`.".PHP_EOL;
}
// Walk the plank, aargh! matey!
var_dump($supervisor2->send(['SIGHUP', $supervisor]));
function makeReceiver(?int $id = null, ?array $names = null) {
$names = $names ?? [];
$cNames = 0;
$maxUsers = 5;
$running = true;
$id = $id ?? random_int(1, 500000);
$log = function($signal, $message, ?string $tmpl = null) use($id) {
$tmpl = $tmpl ?? 'Receiver(%d): [%s](%s)';
echo sprintf($tmpl, $id, $signal, \json_encode($message)).PHP_EOL;
};
while ($running) {
list($signal, $message) = yield;
$log($signal, $message);
switch($signal) {
case 'SIGHUP': // Hang up!
$running = false;
return null;
case 'SIGCYC': // Recycle, reset
$names = [];
$cNames = 0;
break;
case 'addUser':
if ($maxUsers > $cNames) {
$names[] = $message;
$cNames++;
}
break;
case 'iterator':
$maxUsers = 0;
yield array_values(array_unique(array_values($names)));
}
}
}
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
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).
Version System time (s) User time (s) Memory (MiB) 7.2.3 0.014 0.017 17.98 7.2.2 0.019 0.017 17.98 7.2.1 0.014 0.014 18.19 7.2.0 0.012 0.012 17.98 7.1.15 0.010 0.013 17.00 7.1.14 0.012 0.015 17.13 7.1.13 0.014 0.015 16.87 7.1.12 0.016 0.012 16.86 7.1.11 0.013 0.013 16.66 7.1.10 0.014 0.014 16.00 7.1.9 0.014 0.013 16.43 7.1.8 0.012 0.011 16.23 7.1.7 0.046 0.011 15.46 7.1.6 0.034 0.020 33.00 7.1.5 0.042 0.015 32.97 7.1.4 0.027 0.016 32.58 7.1.3 0.032 0.016 32.63 7.1.2 0.035 0.018 32.93 7.1.1 0.092 0.013 14.91 7.1.0 0.008 0.015 14.93
preferences:dark mode live preview
21.93 ms | 401 KiB | 5 Q