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 相关文章推荐
一个MYSQL操作类
Nov 16 PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
PHP以及MYSQL日期比较方法
Nov 29 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
PHP递归调用的小技巧讲解
Feb 19 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
php实现上传图片保存到数据库的方法
Feb 11 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
php+js实现百度地图多点标注的方法
Nov 30 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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
php 静态化实现代码
2009/03/20 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
2017/06/17 PHP
javascript CSS画图之基础篇
2009/07/29 Javascript
jQuery 联动日历实现代码
2012/05/31 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
JQuery跳出each循环的方法
2015/04/16 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
几行js代码实现自适应
2017/02/24 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
详谈Node.js之操作文件系统
2017/08/29 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python开发的实用计算器完整实例
2017/05/10 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
澳大利亚手袋、珠宝和在线时尚精品店:The Way
2019/12/21 全球购物
学生会主席就职演讲稿
2014/01/14 职场文书
高中军训感想800字
2014/02/23 职场文书
出纳岗位职责
2015/01/31 职场文书
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL