public function testShutdownForce() { $pool = new \Jenner\SimpleFork\Pool(); for ($i = 0; $i < 10; $i++) { $process = new \Jenner\SimpleFork\Process(function () { sleep(3); }); $pool->execute($process); } $start = time(); $pool->shutdownForce(); $time = time() - $start; $this->assertTrue($time < 3); $this->assertEquals(0, $pool->aliveCount()); }
<?php /** * Created by PhpStorm. * User: Jenner * Date: 2016/3/17 * Time: 19:57 */ declare (ticks=1); require dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; class Consumer extends \Jenner\SimpleFork\Process { public function run() { $queue = new \Jenner\SimpleFork\Queue\RedisQueue('127.0.0.1', 6379, 1); while (true) { $res = $queue->get(); if ($res !== false) { echo $res . PHP_EOL; } else { break; } } } } $pool = new \Jenner\SimpleFork\Pool(); for ($i = 0; $i < 10; $i++) { $consumer = new Consumer(); $pool->execute($consumer); } $pool->wait(true);
<?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->execute($process); } $pool->wait();
<?php /** * 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() { $queue = new \Jenner\SimpleFork\Queue\SystemVMessageQueue(1, "/tmp/simple-fork-test.ipc"); while (true) { $res = $queue->get(); if ($res !== false) { echo $this->getPid() . ":" . $res . PHP_EOL; } //usleep(100000); } } } $worker_1 = new Worker(); $worker_2 = new Worker(); $pool = new \Jenner\SimpleFork\Pool(); $pool->execute($worker_1); $pool->execute($worker_2); $pool->wait();
<?php /** * Created by PhpStorm. * User: Jenner * Date: 2015/8/12 * Time: 19:55 */ require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; class TestRunnable implements \Jenner\SimpleFork\Runnable { /** * 进程执行入口 * @return mixed */ public function run() { sleep(10); echo getmypid() . ':done' . PHP_EOL; } } $pool = new \Jenner\SimpleFork\Pool(); $pool->execute(new \Jenner\SimpleFork\Process(new TestRunnable())); $pool->execute(new \Jenner\SimpleFork\Process(new TestRunnable())); $pool->execute(new \Jenner\SimpleFork\Process(new TestRunnable())); $pool->wait();
require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; class Producer extends \Jenner\SimpleFork\Process { public function run() { $queue = new \Jenner\SimpleFork\Queue\SystemVMessageQueue(); for ($i = 0; $i < 10; $i++) { echo getmypid() . PHP_EOL; $queue->put($i); } } } class Worker extends \Jenner\SimpleFork\Process { public function run() { sleep(5); $queue = new \Jenner\SimpleFork\Queue\SystemVMessageQueue(); for ($i = 0; $i < 10; $i++) { $res = $queue->get(); echo getmypid() . ' = ' . $i . PHP_EOL; var_dump($res); } } } $producer = new Producer(); $worker = new Worker(); $pool = new \Jenner\SimpleFork\Pool(); $pool->execute($producer); $pool->execute($worker); $pool->wait();