php多任务程序实例解析_php技巧

本文以实例简单解析了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
, 程序
多任务
activiti 多任务实例、多任务程序、quick多任务应用程序、keil 多任务 程序、多任务程序框架结构,以便于您获取更多的相关知识。

时间: 2024-09-20 05:37:10

php多任务程序实例解析_php技巧的相关文章

php实现的单一入口应用程序实例分析_php技巧

本文较为详细的分析了php单一入口应用程序.分享给大家供大家参考.具体如下: 什么是单一入口应用程序? 在解释什么是单一入口应用程序之前,我们先来看看传统的 web 应用程序. news.php 显示新闻列表 news_edit.php 显示新闻编辑页面 这两个页面不但分别实现了两个功能,还成为了应用程序的两个入口. 那什么是入口啊? 打个比方,大家上 WC,都是男生进一个门,女生进一个门.这两个门就是 WC 的两个入口. 呵呵,上面的例子应该很好理解吧.那稍微变换一下,单一入口的概念就很容易理

PHP文件锁定写入实例解析_php技巧

本文以实例讲述了PHP文件写入方法,以应对多线程写入,具体代码如下: function file_write($file_name, $text, $mode='a', $timeout=30){ $handle = fopen($file_name, $mode); while($timeout>0){ if ( flock($handle, LOCK_EX) ) { // 排它性的锁定 $timeout--; sleep(1); } } if ( $timeout > 0 ){ fwrit

php的SimpleXML方法读写XML接口文件实例解析_php技巧

在php5中读写xml文档是非常方便的,可以直接使用php的SimpleXML方法来快速解析与生成xml格式的文件,下面举例说明: 创建一个SimpleXML对象有三种方法: 1.使用new关键字创建 复制代码 代码如下: $xml="<personinfo><item><id>1</id><name>aaa</name><age>16</age></item><item>&l

php下Memcached入门实例解析_php技巧

本文较为详细的讲述了php下Memcached的入门知识与实例.分享给大家供大家参考.具体如下: memcache 在什么情况下被使用,什么情况下不要使用? 你在何时应该使用 memcache,又要在何时避免使用它?现在你已经知道了,memcahced 是被设计为减轻数据库教程端压力的,但是你最好能制定一个良好的策略,来想办法让 memcached 来尽可能的缓存那些最影响性能的查询,你可以试着为应用中的所有查询做一些执行时间日志,可以帮助你来分析哪些内容是要重点被缓存的. 现在假设你正在运营一

PHP使用Mysql事务实例解析_php技巧

本文实例讲解了PHP使用MySQL事物的实例,并备有注释加以详细说明.分享给大家供大家参考之用. 具体实例如下所示: <?php //数据库连接 $conn = mysql_connect('localhost', 'root', ''); mysql_select_db('test', $conn); mysql_query("SET NAMES GBK"); /* 支持事务的表必须是InnoDB类型 一段事务中只能出现一次: mysql_query('START TRANSA

PHP实现克鲁斯卡尔算法实例解析_php技巧

本文实例展示了PHP实现的格鲁斯卡尔算法(kruscal)的实现方法,分享给大家供大家参考.相信对于大家的PHP程序设计有一定的借鉴价值. 具体代码如下: <?php require 'edge.php'; $a = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' ); $b = array( 'ab' => '10', 'af' => '11', 'gb' => '16', 'fg' => '17', 'bc' =>

PHP闭包实例解析_php技巧

本文实例分析了PHP程序设计中闭包的概念机用法,分享给大家供大家参考.具体分析如下: 通常来说,闭包也就是PHP的匿名函数, 但是和函数不同的是,闭包可以通过use使用函数声明时所在作用域的变量的值. 具体形式如下: $a = function($arg1, $arg2) use ($variable) { // 声明函数闭包到变量$a, 参数为$arg1, $arg2 ,该闭包需使用$variable变量 } 具体用法实例如下: <?php $result = 0; $one = functi

PHP中实现汉字转区位码应用源码实例解析_php技巧

复制代码 代码如下: <?php global $PHP_SELF; //echo $PHP_SELF; $t1=$_POST['textfield1']; $t2=$_POST['textfield2']; $t3=$_POST['textfield3']; $t4=$_POST['textfield4']; // 汉字--区位码 if($t1!=""){ $t2= sprintf("%02d%02d",ord($t1[0])-160,ord($t1[1])

php实现与erlang的二进制通讯实例解析_php技巧

一般来说网络通讯常用的方式有2种:文本通讯和二进制通讯.php与erlang之间实现文本通讯比较简单,这里就不做讨论,本文主要讨论的是php与erlang实现二进制通讯的实现方法.实现步骤如下: erlang端代码: 复制代码 代码如下: -module(server). -export([start/0]). -define( UINT, 32/unsigned-little-integer). -define( INT, 32/signed-little-integer). -define(