PHP使用Pthread实现的多线程操作实例


Posted in PHP onNovember 14, 2015

本文实例讲述了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程序设计有所帮助。

PHP 相关文章推荐
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
PHP原理之异常机制深入分析
Aug 08 PHP
解析CodeIgniter自定义配置文件
Jun 18 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
Jun 27 PHP
PHP中的output_buffering详细介绍
Sep 27 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
PHP的Yii框架中Model模型的学习教程
Mar 29 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
Laravel中获取IP的真实地理位置
Apr 01 PHP
开启PHP Static 关键字之旅模式
Nov 13 #PHP
php正则表达式学习笔记
Nov 13 #PHP
php邮箱地址正则表达式验证
Nov 13 #PHP
合格的PHP程序员必备技能
Nov 13 #PHP
PHP基于yii框架实现生成ICO图标
Nov 13 #PHP
php中session定期自动清理的方法
Nov 12 #PHP
详解php设置session(过期、失效、有效期)
Nov 12 #PHP
You might like
php使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
ThinkPHP的L方法使用简介
2014/06/18 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
用JS写的一个Ajax库(实例代码)
2016/08/06 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
2019/05/03 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
python引用DLL文件的方法
2015/05/11 Python
python 默认参数问题的陷阱
2016/02/29 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
医学生求职自荐信
2013/10/25 职场文书
护理专业自荐信
2013/12/03 职场文书
竞选班长演讲稿
2013/12/30 职场文书
年终总结会议主持词
2014/03/17 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
学习作风建设心得体会
2014/10/22 职场文书
2014年居委会工作总结
2014/12/09 职场文书
师范生见习总结范文
2015/06/23 职场文书
市级三好生竞选稿
2015/11/21 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android
入门学习Go的基本语法
2021/07/07 Golang
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android