本文以实例简单解析了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); }
本文地址:https://www.stayed.cn/item/7978
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我