带有pthreads的PHP中的Worker和Pool
我目前正在学习PHP中的多线程。我已经知道多线程的基本原理,比如创建线程并同时运行多个线程,但我仍然对工作线程和池感到困惑 目前,我有以下脚本:带有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
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();