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环境搭建最新方法
Sep 05 PHP
PHP遍历二维数组的代码
Apr 22 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
ThinkPHP中Session用法详解
Nov 29 PHP
php有道翻译api调用方法实例
Dec 22 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
php中解析带中文字符的url函数分享
Jan 20 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
Yii快速入门经典教程
Dec 28 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 PHP
Nginx+php配置文件及原理解析
Dec 09 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位运算的简单权限设计
2013/06/30 PHP
PHP SPL使用方法和他的威力
2013/11/12 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
PHP中的替代语法介绍
2015/01/09 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
javascript 读取图片文件的大小
2009/06/25 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
用Python实现数据的透视表的方法
2018/11/16 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
python如何制作英文字典
2019/06/25 Python
python使用配置文件过程详解
2019/12/28 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
相亲大会策划方案
2014/06/05 职场文书
搞笑老公保证书
2015/02/26 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python