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&amp;java(三)
Oct 09 PHP
用PHP和ACCESS写聊天室(四)
Oct 09 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
PHP连接局域网MYSQL数据库的简单实例
Aug 26 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
php生成xml时添加CDATA标签的方法
Oct 17 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 PHP
PHP+MySQL存储数据常见中文乱码问题小结
Jun 13 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 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中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
php格式输出文件var_export函数实例
2014/11/15 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
Vue加载组件、动态加载组件的几种方式
2018/08/31 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
Python二次规划和线性规划使用实例
2019/12/09 Python
VICHY薇姿英国官网:全球专业敏感肌护肤领先品牌
2017/07/04 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
Java如何格式化日期
2012/08/07 面试题
大型车展策划方案
2014/02/01 职场文书
施工协议书范本
2014/04/22 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
学雷锋的心得体会
2014/09/04 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
2014年统计工作总结
2014/11/21 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android