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实现批量查询清除一句话后门的代码
Jan 20 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
使用NetBeans + Xdebug调试PHP程序的方法
Apr 12 PHP
php连接数据库代码应用分析
May 29 PHP
PHP字符串中特殊符号的过滤方法介绍
Feb 18 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
php自定义session示例分享
Apr 22 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
php文件系统处理方法小结
May 23 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
thinkPHP模板中函数的使用方法示例
Nov 30 PHP
php 数据结构之链表队列
Oct 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
详解bootstrap导航栏.nav与.navbar区别
2017/11/23 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
Python缩进和冒号详解
2016/06/01 Python
利用aardio给python编写图形界面
2017/08/21 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Python控制台实现交互式环境执行
2020/06/09 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
法律系毕业生自荐信范文
2014/03/27 职场文书
2015年考研复习计划
2015/01/19 职场文书
预备党员半年考察意见
2015/06/01 职场文书
从事会计工作年限证明
2015/06/23 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
微信小程序实现聊天室功能
2021/06/14 Javascript
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS