这篇文章主要介绍了PHP使用Pthread实现的多线程操作的方法,以完整实例形式分析了php多线程的创建及使用相关技巧,需要的朋友可以参考下
本文实例讲述了PHP使用Pthread实现的多线程操作。分享给大家供大家参考,具体如下:
- <?php
- class vote extends Thread {
- public $res = '';
- public $url = array();
- public $name = '';
- public $runing = false;
- public $lc = false;
- public function __construct($name) {
- $this->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}秒处理数据./n";
- $this->res = rand(100, 999);
- sleep($nt);
- $this->lurl = $this->param;
- $this->param = '';
- } else {
- echo "线程[{$this->name}]等待任务../n";
- }
- 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}]./n";
- break 2;
- }
- }
- sleep(1);
- }
- }
- echo "所有线程派发完毕,等待执行完成./n";
- //等待所有线程运行结束
- while (count($pool)) {
- //遍历检查线程组运行结束
- foreach ($pool as $key => $threads) {
- if ($worker->param=='') {
- echo "[{$threads->name}]线程空闲,上次参数[{$threads->lurl}]结果[{$threads->res}]./n";
- echo "[{$threads->name}]线程运行完成,退出./n";
- //设置结束标志
- $threads->runing = false;
- unset($pool[$key]);
- }
- }
- echo "等待中.../n";
- sleep(1);
- }
- echo "所有线程执行完毕./n";
希望本文所述对大家php程序设计有所帮助。
新闻热点
疑难解答