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语法速查表
Dec 06 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续二
Apr 03 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
php下通过IP获取地理位置的代码(小偷程序)
Jun 09 PHP
php中通过DirectoryIterator删除整个目录的方法
Mar 13 PHP
php+mysql实现无限级分类
Nov 11 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
Yii框架中使用PHPExcel的方法分析
Jul 25 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 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
多人战的战术与战略
2020/03/04 星际争霸
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
php发送与接收流文件的方法
2015/02/11 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
javascript 数组的方法集合
2008/06/05 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
javascript数组排序汇总
2015/07/07 Javascript
AngularJS基础 ng-click 指令示例代码
2016/08/01 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
Python Numpy库安装与基本操作示例
2019/01/08 Python
python创建n行m列数组示例
2019/12/02 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
Pytorch转tflite方式
2020/05/25 Python
python实现无边框进度条的实例代码
2020/12/30 Python
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
canvas像素画板的实现代码
2018/11/21 HTML / CSS
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
优秀毕业生推荐信范文
2014/03/07 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
四风批评与自我批评发言稿
2014/10/14 职场文书
装饰技术负责人岗位职责
2015/04/13 职场文书
毕业实习单位意见
2015/06/04 职场文书