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 相关文章推荐
用cookies来跟踪识别用户
Oct 09 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
Apr 20 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
简单的php写入数据库类代码分享
Jul 26 PHP
web server使用php生成web页面的三种方法总结
Oct 28 PHP
php获取淘宝分类id示例
Jan 16 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
PHP array_reduce()函数的应用解析
Oct 28 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 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
PHPlet在Windows下的安装
2006/10/09 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
JavaScript中CreateTextFile函数
2020/08/30 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
Python实现的石头剪子布代码分享
2014/08/22 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
小学教师办公室制度
2014/02/03 职场文书
护理专科学生自荐书
2014/07/05 职场文书
健康状况证明书
2014/11/26 职场文书
英文导游词
2015/02/13 职场文书
2014年个人年终总结
2015/03/09 职场文书
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang
windows server2008 开启端口的实现方法
2022/06/25 Servers