本文以实例简单解析了php多任务程序的实现方法,具体代码如下:
<?phperror_reporting(E_ALL);set_time_limit(0);/*** php多任务程序的实现* 借助proc_open* 其实该叫进程(process)* 能启动多进程,你可以使用你的想象力做你想做的了,以后再写个能用的* 如果你是在linux上跑php,并且启用pcntl模块后,使用pcntl函数该更好* */class Thread {protected $_pref; // process referenceprotected 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
";} else {$somecontent = "
//~~~~~~~~~~~~-这次请求序号是:" . $argv[1];sleep(mt_rand(0, 3));$handle = fopen($file, "a+");fwrite($handle, $somecontent);}