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中使用Oracle数据库(5)
Oct 09 PHP
几种显示数据的方法的比较
Oct 09 PHP
PHP开发过程中常用函数收藏
Dec 14 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 PHP
PHP封装的完整分页类示例
Aug 21 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 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
多文件上传的例子
2006/10/09 PHP
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
php 将json格式数据转换成数组的方法
2018/08/21 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
Javascript Memoizer浅析
2014/10/16 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
2015/08/28 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
Python正确重载运算符的方法示例详解
2017/08/27 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
Python变量访问权限控制详解
2019/06/29 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Python如何读取文件中图片格式
2020/01/13 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
Python 多进程原理及实现
2020/12/21 Python
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
公司道歉信范文
2014/01/09 职场文书
社区庆中秋节活动方案
2014/02/07 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫