加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读