public function testAliveCount() { $pool = new \Jenner\SimpleFork\Pool(); for ($i = 0; $i < 10; $i++) { $process = new \Jenner\SimpleFork\Process(function () { sleep(3); }); $pool->submit($process); } $pool->start(); $this->assertEquals(10, $pool->aliveCount()); $pool->wait(); }
<?php /** * Created by PhpStorm. * User: Jenner * Date: 2015/8/12 * Time: 20:38 */ require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; class TestRunnable extends \Jenner\SimpleFork\Runnable { /** * 进程执行入口 * @return mixed */ public function run() { sleep(10); echo getmypid() . ':done' . PHP_EOL; } } $pool = new \Jenner\SimpleFork\Pool(); $pool->submit(new \Jenner\SimpleFork\Process(new TestRunnable())); $pool->submit(new \Jenner\SimpleFork\Process(new TestRunnable())); $pool->submit(new \Jenner\SimpleFork\Process(new TestRunnable())); $pool->start(); while ($pool->aliveCount() > 0) { echo "i am waiting" . PHP_EOL; $pool->wait(false); sleep(1); }
* Created by PhpStorm. * User: Jenner * Date: 2015/8/19 * Time: 14:32 */ declare (ticks=1); require dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; error_reporting(E_ALL); class Worker extends \Jenner\SimpleFork\Process { public function run() { while (true) { $res = $this->queue->get(1); if ($res !== false) { echo $this->getPid() . ":" . $res . PHP_EOL; } //usleep(100000); } } } $queue = new \Jenner\SimpleFork\IPC\SystemVMessageQueue(1, "/tmp/simple-fork-test.ipc"); $worker_1 = new Worker(); $worker_1->setQueue($queue); $worker_2 = new Worker(); $worker_2->setQueue($queue); $pool = new \Jenner\SimpleFork\Pool(); $pool->submit($worker_1); $pool->submit($worker_2); $pool->start(); $pool->wait();
*/ require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; class Producer extends \Jenner\SimpleFork\Process { public function run() { $cache = new \Jenner\SimpleFork\Cache\SharedMemory(); for ($i = 0; $i < 10; $i++) { $cache->set($i, $i); echo "set {$i} : {$i}" . PHP_EOL; } } } class Worker extends \Jenner\SimpleFork\Process { public function run() { sleep(5); $cache = new \Jenner\SimpleFork\Cache\SharedMemory(); for ($i = 0; $i < 10; $i++) { echo "get {$i} : " . $cache->get($i) . PHP_EOL; } } } $producer = new Producer(); $worker = new Worker(); $pool = new \Jenner\SimpleFork\Pool(); $pool->submit($producer); $pool->submit($worker); $pool->start(); $pool->wait();
<?php /** * Created by PhpStorm. * User: Jenner * Date: 2015/10/23 * Time: 16:48 */ require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; $pool = new \Jenner\SimpleFork\Pool(); for ($i = 0; $i < 100; $i++) { $process = new \Jenner\SimpleFork\Process(function () { sleep(30); echo getmypid() . PHP_EOL; }); $pool->submit($process); } $pool->start(); $pool->wait();