带有pthreads的PHP中的Worker和Pool

带有pthreads的PHP中的Worker和Pool,php,multithreading,pthreads,Php,Multithreading,Pthreads,我目前正在学习PHP中的多线程。我已经知道多线程的基本原理,比如创建线程并同时运行多个线程,但我仍然对工作线程和池感到困惑 目前,我有以下脚本: <?php class MyWork extends Threaded { public $name; public function __construct($name) { echo "Constructing worker $name\n"; $this->name = $name

我目前正在学习PHP中的多线程。我已经知道多线程的基本原理,比如创建线程并同时运行多个线程,但我仍然对工作线程和池感到困惑

目前,我有以下脚本:

<?php

class MyWork extends Threaded {

    public $name;

    public function __construct($name) {
        echo "Constructing worker $name\n";
        $this->name = $name;
    }

    public function run() {
        echo "Worker $this->name start running\n";
        for ($i = 1; $i <= 5; $i++) {
            echo "Worker $this->name : $i\n";
            sleep(1);
        }
    }

}

class MyWorker extends Worker {
    public function run() {}
}

$pool = new Pool(1, \MyWorker::class);
$pool->submit(new MyWork("A"));
$pool->submit(new MyWork("B"));
$pool->submit(new MyWork("C"));
但是,我得到的是:

Constructing worker A
Constructing worker B
Worker A start running
Constructing worker C
Worker A : 1
Worker  : 2
Worker  : 3
Worker  : 4
Worker  : 5
Worker  start running
Worker  : 1
Worker  : 2
Worker  : 3
Worker  : 4
Worker  : 5
Worker  start running
Worker  : 1
Worker  : 2
Worker  : 3
Worker  : 4
Worker  : 5
为什么工人的名字只出现一次,然后就这样消失了

注意:我在Windows 8.1上使用PHP5.5.10和phtreads 2.0.4,我通过CLI运行脚本。

在脚本末尾(在上次提交()之后),工作进程被销毁,池在仍在执行对象时关闭,这解释了为什么名称消失

这样做

$pool = new Pool(1, \MyWorker::class);
$pool->submit(new MyWork("A"));
$pool->submit(new MyWork("B"));
$pool->submit(new MyWork("C"));
$pool->shutdown();
$pool = new Pool(1, \MyWorker::class);
$pool->submit(new MyWork("A"));
$pool->submit(new MyWork("B"));
$pool->submit(new MyWork("C"));
$pool->shutdown();