예제 #1
0
 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();
 }
예제 #2
0
 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());
 }
예제 #3
0
<?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);
예제 #4
0
<?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();
예제 #5
0
<?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);
}
예제 #6
0
<?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();
예제 #7
0
 * 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();
예제 #8
0
 */
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();
예제 #9
0
<?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();
예제 #10
0
 */
require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
class TestRunnable extends \Jenner\SimpleFork\Runnable
{
    /**
     * @var \Jenner\SimpleFork\IPC\Semaphore
     */
    protected $sem;
    public function __construct()
    {
        $this->sem = \Jenner\SimpleFork\IPC\Semaphore::create("test");
    }
    /**
     * 进程执行入口
     * @return mixed
     */
    public function run()
    {
        for ($i = 0; $i < 20; $i++) {
            $this->sem->acquire();
            echo "my turn: {$i} " . getmypid() . PHP_EOL;
            $this->sem->release();
            sleep(1);
        }
    }
}
$pool = new \Jenner\SimpleFork\Pool();
$pool->submit(new \Jenner\SimpleFork\Process(new TestRunnable()));
$pool->submit(new \Jenner\SimpleFork\Process(new TestRunnable()));
$pool->start();
$pool->wait();
예제 #11
0
<?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();
예제 #12
0
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();
예제 #13
0
<?php

/**
 * Created by PhpStorm.
 * User: Jenner
 * Date: 2016/3/17
 * Time: 19:53
 */
declare (ticks=1);
require dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
class Producer extends \Jenner\SimpleFork\Process
{
    public function run()
    {
        $queue = new \Jenner\SimpleFork\Queue\RedisQueue('127.0.0.1', 6379, 1);
        for ($i = 0; $i < 100000; $i++) {
            $queue->put(getmypid() . '-' . mt_rand(0, 1000));
        }
        $queue->close();
    }
}
$pool = new \Jenner\SimpleFork\Pool();
for ($i = 0; $i < 10; $i++) {
    $process = new Producer();
    $pool->execute($process);
}
$pool->wait(true);