Exemple #1
0
<?php

//usage: php sleepsort.php 3 2 1 4
require __DIR__ . '/../src/Channel.php';
require __DIR__ . '/../src/Runner.php';
use PHProutine\Channel;
use PHProutine\Runner;
$runner = new Runner();
$channel = new Channel();
array_shift($argv);
foreach ($argv as $val) {
    $runner->go(function ($v) use($channel) {
        sleep($v);
        $channel->write($v);
    }, $val);
}
foreach ($argv as $val) {
    echo $channel->read(), "\n";
}
Exemple #2
0
<?php

require __DIR__ . '/../src/Channel.php';
require __DIR__ . '/../src/Runner.php';
use PHProutine\Channel;
use PHProutine\Runner;
// intDoubler doubles the given int, then sends it through the given channel
function intDoubler($ch, $n)
{
    $ch->write($n * 2);
}
$runner = new Runner();
// Make channels
$ch = new Channel();
$answer = new Channel();
// Spawn 3 PHProutines (basically PROCESSES) to process data in background
$runner->go('intDoubler', $ch, 10);
$runner->go('intDoubler', $ch, 20);
$runner->go(function ($a, $b) use($ch) {
    $ch->write($a + $b);
}, 30, 40);
// Create anonymous function on the fly, launch as PHProutine!
$runner->go(function () use($ch, $answer) {
    // Save the 3 values passed through the channel as x, y, and z
    list($x, $y, $z) = [$ch->read(), $ch->read(), $ch->read()];
    // Calculate answer, write to `answer` channel
    $answer->write(sprintf('%d + %d + %d = %d', $x, $y, $z, $x + $y + $z));
});
// Print answer resulting from channel read
printf("%s\n", $answer->read());