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 相关文章推荐
让你同时上传 1000 个文件 (一)
Oct 09 PHP
PHP数据库调用类调用实例(详细注释)
Jul 12 PHP
php语言流程控制中的主动与被动
Nov 05 PHP
2014过年倒计时示例
Jan 31 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
php获取Google机器人访问足迹的方法
Apr 15 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
php+flash+jQuery多图片上传源码分享
Jul 27 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
Nov 20 PHP
php探针使用原理和技巧讲解
Sep 17 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
微信access_token的获取开发示例
2015/04/16 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
js中更短的 Array 类型转换
2011/10/30 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
JS实现div居中示例
2014/04/17 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
小程序实现多列选择器
2019/02/15 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
Python sys.argv用法实例
2015/05/28 Python
python MysqlDb模块安装及其使用详解
2018/02/23 Python
python的re模块使用方法详解
2019/07/26 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
校园奶茶店创业计划书
2014/01/23 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
Python中的 Set 与 dict
2022/03/13 Python