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 相关文章推荐
自动跳转中英文页面
Oct 09 PHP
用函数读出数据表内容放入二维数组
Oct 09 PHP
php开启安全模式后禁用的函数集合
Jun 26 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
Aug 06 PHP
destoon文章模块调用企业会员资料的方法
Aug 22 PHP
php第一次无法获取cookie问题处理
Dec 15 PHP
PHP中的静态变量及static静态变量使用详解
Nov 05 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
May 20 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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中的登陆login
2007/01/18 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
vue 挂载路由到头部导航的方法
2017/11/13 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
JavaScript 中的无穷数(Infinity)详解
2020/02/13 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
Python OpenCV读取png图像转成jpg图像存储的方法
2018/10/28 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
幼儿教育感言
2014/02/05 职场文书
服务质量承诺书
2014/03/27 职场文书
我爱读书演讲稿
2014/05/07 职场文书
药店采购员岗位职责
2014/09/30 职场文书
丧事答谢词大全
2015/09/30 职场文书
使用Django实现商城验证码模块的方法
2021/06/01 Python