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 相关文章推荐
PHP4之COOKIE支持详解
Oct 09 PHP
PHP 作用域解析运算符(::)
Jul 27 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 PHP
thinkphp使用literal防止模板标签被解析的方法
Nov 22 PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 PHP
10个php函数实用却不常见
Oct 13 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
Jun 17 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 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中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
js字符串类型String常用操作实例总结
2019/07/05 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python编写打字训练小程序
2019/09/26 Python
Pycharm小白级简单使用教程
2020/01/08 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
python switch 实现多分支选择功能
2020/12/21 Python
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
某公司面试题
2012/03/05 面试题
EJB timer的种类
2014/10/28 面试题
文职个人求职信范文
2013/09/23 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
民事诉讼代理词
2015/05/25 职场文书