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时间戳使用实例代码
Jun 07 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
php数组的概述及分类与声明代码演示
Feb 26 PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
Jun 05 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
php建立Ftp连接的方法
Mar 07 PHP
php简单获取文件扩展名的方法
Mar 24 PHP
PHP date函数常用时间处理方法
May 11 PHP
php获取给定日期相差天数的方法分析
Feb 20 PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 PHP
php使用event扩展的io复用测试的示例
Oct 20 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
mayfish 数据入库验证代码
2010/04/30 PHP
php实现httpclient类示例
2014/04/08 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
2013/04/28 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
vue全局使用axios的操作
2020/09/08 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
详解python做UI界面的方法
2019/02/27 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
大学生优秀自荐信范文
2014/02/25 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang