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-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
php与paypal整合方法
Nov 28 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
Oct 29 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
php 根据url自动生成缩略图并处理高并发问题
Jan 23 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
Nov 17 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 PHP
Laravel SQL语句记录方式(推荐)
May 26 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
thinkPHP5 ACL用户权限模块用法详解
May 10 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.MVC的模板标签系统(一)
2006/09/05 PHP
改进的IP计数器
2006/10/09 PHP
用PHP实现维护文件代码
2007/06/14 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
通过url查找a元素并点击
2014/04/09 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
jQuery实现的经典竖向伸缩菜单效果代码
2015/09/24 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
Django中几种重定向方法
2015/04/28 Python
Python语言的变量认识及操作方法
2018/02/11 Python
python绘制立方体的方法
2018/07/02 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
HTML5探秘:用requestAnimationFrame优化Web动画
2018/06/03 HTML / CSS
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
日语系毕业生推荐信
2013/11/11 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
社区文明倡议书
2015/04/28 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js
Go语言编译原理之变量捕获
2022/08/05 Golang