php多任务程序实例解析


Posted in PHP onJuly 19, 2014

本文以实例简单解析了php多任务程序的实现方法,具体代码如下:

<?php
error_reporting(E_ALL);
set_time_limit(0);
/**
* php多任务程序的实现
* 借助proc_open
* 其实该叫进程(process)
* 能启动多进程,你可以使用你的想象力做你想做的了,以后再写个能用的
* 如果你是在linux上跑php,并且启用pcntl模块后,使用pcntl函数该更好
* 
*/
class Thread {
  protected $_pref; // process reference
  protected static $_instance = null;
  protected $_pipes;
  
  private function __construct() {
    $this->_pref = 0;
  }
  
  public static function getInstance($file) {
    if (null == self::$_instance) {
      self::$_instance = new self;
    }
    
    $descriptor = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("file", "./error-output.txt", "a"),
    );
    self::$_instance->_pref = proc_open("php -q $file", $descriptor, self::$_instance->_pipes);
    return true;
  }
  
  public function __destruct() {
    proc_close($this->_pref);
    $this->_pref = null;
  }
}
// 测试代码
$file = __FILE__;
if(empty($argv[1])) {
  $t2 = Thread::getInstance("$file 1");
  $t3 = Thread::getInstance("$file 2");
  $t4 = Thread::getInstance("$file 3");
  $t5 = Thread::getInstance("$file 4");
  $t5 = Thread::getInstance("$file 5");
  $t5 = Thread::getInstance("$file 6");
  $t2 = Thread::getInstance("$file 7");
  $t3 = Thread::getInstance("$file 8");
  $t4 = Thread::getInstance("$file 9");
  $t5 = Thread::getInstance("$file 10");
  $t5 = Thread::getInstance("$file 11");
  $t5 = Thread::getInstance("$file 12");
  echo "Main thread done\n";
} else {
  $somecontent = "\r\n//~~~~~~~~~~~~-这次请求序号是:" . $argv[1];
  sleep(mt_rand(0, 3));
  $handle = fopen($file, 'a+');
  fwrite($handle, $somecontent);
}
PHP 相关文章推荐
一段php加密解密的代码
Oct 09 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
PHP 转义使用详解
Jul 15 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
详解PHP的Yii框架中自带的前端资源包的使用
Mar 31 PHP
Joomla开启SEF的方法
May 04 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 PHP
php + nginx项目中的权限详解
May 23 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
Oct 25 PHP
Yii2框架加载css和js文件的方法分析
May 25 PHP
php实现斐波那契数列的简单写法
Jul 19 #PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 #PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 #PHP
CodeIgniter中实现泛域名解析
Jul 19 #PHP
php实现建立多层级目录的方法
Jul 19 #PHP
PHP实现图片压缩的两则实例
Jul 19 #PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 #PHP
You might like
mysql+php分页类(已测)
2008/03/31 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
javascript实现留言板功能
2020/02/08 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python的绘图工具matplotlib使用实例
2014/07/03 Python
浅谈Python中的数据类型
2015/05/05 Python
对于Python中RawString的理解介绍
2016/07/07 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
python zip()函数使用方法解析
2019/10/31 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
Python魔术方法专题
2020/06/19 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
教师实习自我鉴定
2013/12/13 职场文书
个性婚礼策划方案
2014/05/17 职场文书
求职信标题怎么写
2014/05/26 职场文书
英语教师求职信
2014/06/16 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
英文投诉信格式
2015/07/03 职场文书
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
php双向队列实例讲解
2021/11/17 PHP
德生BCL3000抢先使用感受和评价
2022/04/07 无线电
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android