PHP的工作者和池与pthreads

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP的工作者和池与pthreads脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在学习 PHP中的多线程.我已经知道多线程的基本知识,比如创建线程并将它们中的多个一起运行,但我仍然对Worker和Pool感到困惑.

目前,我有这个脚本:

<?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"));

根据我的理解,这应该创建一个工人池,一次最多可以运行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();

脚本宝典总结

以上是脚本宝典为你收集整理的PHP的工作者和池与pthreads全部内容,希望文章能够帮你解决PHP的工作者和池与pthreads所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。