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 相关文章推荐
基于mysql的bbs设计(二)
Oct 09 PHP
PHP教程 预定义变量
Oct 23 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
Oct 29 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
深入apache配置文件httpd.conf的部分参数说明
Jun 28 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
Nov 19 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
基于php的微信公众平台开发入门实例
Apr 15 PHP
Yii框架实现多数据库配置和操作的方法
May 25 PHP
PHP数字金额转换成中文大写显示
Jan 05 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 29 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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 include的妙用,实现路径加密
2008/07/29 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
php广告加载类用法实例
2014/09/23 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
Node.js的进程管理的深入理解
2019/01/09 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
python操作gmail实例
2015/01/14 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
AI人工智能 Python实现人机对话
2017/11/13 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
梵蒂冈和罗马卡:Omnia Card Pass
2018/02/10 全球购物
利群广告词
2014/03/20 职场文书
教师批评与自我批评
2014/10/15 职场文书
2015教师年度考核评语
2015/03/25 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
合同范本之电脑出租
2019/08/13 职场文书
成人成长感言如何写?
2019/08/16 职场文书