资讯专栏INFORMATION COLUMN

PHP多线程实例

hearaway / 1375人阅读

摘要:暂无第一次运行线程收到任务参数需要秒处理数据线程等待任务这里创建线程池启动所有线程使其处于工作状态派发任务给线程参数为空则说明线程空闲线程空闲放入参数上次参数结果所有线程派发完毕等待执行完成等待所有

res    = "暂无,第一次运行.";
        $this->param    = 0;
        $this->lurl   = 0;
        $this->name   = $name;
        $this->runing = true;
        $this->lc     = false;
    }

    public function run() {
        while ($this->runing) {
            if ($this->param != 0) {
                $nt          = rand(1, 10);
                echo "线程[{$this->name}]收到任务参数::{$this->param},需要{$nt}秒处理数据.
";
                $this->res   = rand(100, 999);
                sleep($nt);
                $this->lurl = $this->param;
                $this->param   = "";
            } else {
                echo "线程[{$this->name}]等待任务..
";
            }
            sleep(1);
        }
    }
}

//这里创建线程池.
$pool[] = new vote("a");
$pool[] = new vote("b");
$pool[] = new vote("c");

//启动所有线程,使其处于工作状态
foreach ($pool as $w) {
    $w->start();
}

//派发任务给线程
for ($i = 1; $i < 10; $i++) {
    $worker_content = rand(10, 99);
    while (true) {
        foreach ($pool as $worker) {
            //参数为空则说明线程空闲
            if ($worker->param=="") {
                $worker->param = $worker_content;
                echo "[{$worker->name}]线程空闲,放入参数{$worker_content},上次参数[{$worker->lurl}]结果[{$worker->res}].
";
                break 2;
            }
        }
        sleep(1);
    }
}
echo "所有线程派发完毕,等待执行完成.
";

//等待所有线程运行结束
while (count($pool)) {
    //遍历检查线程组运行结束
    foreach ($pool as $key => $threads) {
        if ($worker->param=="") {
            echo "[{$threads->name}]线程空闲,上次参数[{$threads->lurl}]结果[{$threads->res}].
";
            echo "[{$threads->name}]线程运行完成,退出.
";
            //设置结束标志
            $threads->runing = false;
            unset($pool[$key]);
        }
    }
    echo "等待中...
";
    sleep(1);
}
echo "所有线程执行完毕.
";

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22119.html

相关文章

  • php 线程pthreads官网翻译

    摘要:它包含了你创建多线程应用的全部工具,当然无论是还是控制台程序。任何想要应用在程序里面的多线程应用必须都是继承于这几个实用类以上版本取消了类。 不分享,做一切! php拥有令人敬畏的且数量庞大的扩展跟特征,但是php当初设计这门语言的时候,是因为那个时候的web网站远远没有今天的强大!现在几乎所有的网站(含手机站)服务器都是多核的,如果不是多CPU跟多核,PHP是无法提供更好的服务的。虽...

    heartFollower 评论0 收藏0
  • PHP并发IO编程之路

    摘要:下文如无特殊声明将使用进程同时表示进程线程。收到数据后服务器程序进行处理然后使用向客户端发送响应。现在各种高并发异步的服务器程序都是基于实现的,比如。 并发 IO 问题一直是服务器端编程中的技术难题,从最早的同步阻塞直接 Fork 进程,到 Worker 进程池/线程池,到现在的异步IO、协程。PHP 程序员因为有强大的 LAMP 框架,对这类底层方面的知识知之甚少,本文目的就是详细介...

    Riddler 评论0 收藏0
  • Swoole笔记(一)

    摘要:修复添加超过万个以上定时器时发生崩溃的问题增加模块,下高性能序列化库修复监听端口设置无效的问题等。线程来处理网络事件轮询,读取数据。当的三次握手成功了以后,由这个线程将连接成功的消息告诉进程,再由进程转交给进程。此时进程触发事件。 本文示例代码详见:https://github.com/52fhy/swoo...。 简介 Swoole是一个PHP扩展,提供了PHP语言的异步多线程服务器...

    SHERlocked93 评论0 收藏0
  • Node.js运行原理、高并发性能测试对比及生态圈汇总

    摘要:模式,单实例多进程,常用于多语言混编,比如等,不支持端口复用,需要自己做应用的端口分配和负载均衡的子进程业务代码。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...

    kamushin233 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<