PHP的工作者和池与pthreads
发布时间:2020-12-13 17:47:10 所属栏目:PHP教程 来源:网络整理
导读:我目前正在学习 PHP中的多线程.我已经知道多线程的基本知识,比如创建线程并将它们中的多个一起运行,但我仍然对Worker和Pool感到困惑. 目前,我有这个脚本: ?phpclass MyWork extends Threaded { public $name; public function __construct($name) { echo "C
我目前正在学习
PHP中的多线程.我已经知道多线程的基本知识,比如创建线程并将它们中的多个一起运行,但我仍然对Worker和Pool感到困惑.
目前,我有这个脚本: <?php class MyWork extends Threaded { public $name; public function __construct($name) { echo "Constructing worker $namen"; $this->name = $name; } public function run() { echo "Worker $this->name start runningn"; for ($i = 1; $i <= 5; $i++) { echo "Worker $this->name : $in"; 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")); 根据我的理解,这应该创建一个工人池,一次最多可以运行1名工人吗?因此,我期待这种输出: Constructing worker A Constructing worker B Constructing worker C Worker A start running Worker A : 1 Worker A : 2 Worker A : 3 Worker A : 4 Worker A : 5 Worker B start running Worker B : 1 Worker B : 2 Worker B : 3 Worker B : 4 Worker B : 5 Worker C start running Worker C : 1 Worker C : 2 Worker C : 3 Worker C : 4 Worker C : 5 但是,这就是我所得到的: 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上使用PHP 5.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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |