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为什么选mysql作为数据库? Mysql 创建用户方法
Jul 02 PHP
php 清除网页病毒的方法
Dec 05 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
Jun 28 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
Joomla数据库操作之JFactory::getDBO用法
May 05 PHP
项目中应用Redis+Php的场景
May 22 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
基于Laravel-admin 后台的自定义页面用法详解
Sep 30 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
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
js禁止表单重复提交
2017/08/29 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
微信小程序如何实现在线客服功能
2019/10/16 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
python进阶教程之词典、字典、dict
2014/08/29 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
Python监控主机是否存活并以邮件报警
2015/09/22 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
python模拟实现斗地主发牌
2020/01/07 Python
Python实现壁纸下载与轮换
2020/10/19 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
联强国际笔试题面试题
2013/07/10 面试题
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
物业经理求职自我评价
2013/09/22 职场文书
海飞丝广告词
2014/03/20 职场文书
网络营销策划方案
2014/06/04 职场文书
民主评议党员工作总结
2014/10/20 职场文书
企业员工辞职信范文
2015/05/12 职场文书
公司催款律师函
2015/05/27 职场文书
感谢信
2019/04/11 职场文书
Redis实现分布式锁的五种方法详解
2022/06/14 Redis