PHP pthreads:缺少资源错误

时间:2014-07-07 08:32:47

标签: php multithreading pthreads

刚刚得到PHP pthreads错误

  

pthreads检测到无法启动多线程,系统缺少必要的资源或超出系统强加的限制

  

无法初始化zend_mm存储[win32]

在我的剧本中......

PHP代码如下所示:

class multihread extends Worker  {
    public $result;
    function __construct($e) {
        $this->e = $e;
    }
    public function run() {
        $this->result=file($this->e);
    }
}



$threads = 15;
do {
    for($i=1; $i<=$threads; $i++) {
        if(empty($thread[$i])){
            $e=generate_e($i);
            if($e==false){
                echo "Warning: no more job for e. exiting A"; exit;
            }
            echo "Starting new thread $i \n";
            $thread[$i] = new multihread($e);
            $thread[$i]->start(PTHREADS_INHERIT_NONE);
        }
        elseif($thread[$i]->isWorking()===false) {
            if($thread[$i]->result===false){
                echo "ERROR:Something wrong with thread $i, exit.";
                exit;
            }
            $thread[$i]->shutdown();
            $eval=generate_e($i);
            if($e==false){
                echo "Warning: no more job exiting B"; exit;
            }
            $thread[$i] = new multihread($e);
            $thread[$i]->start(PTHREADS_INHERIT_NONE);
        }
    }
    usleep(100);
}
while(1);

因此,脚本打开新线程,启动此线程,然后用shutdown()关闭线程并在循环中执行。它像魅力一样工作,但在16000+打开\闭合线程后得到了这个错误。似乎有些资源保持锁定状态?如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在线程结束之前,应该detach()线程,或者在线程上调用join()以等待它结束。

缺少一个或另一个导致线程的资源被释放,尽管系统资源耗尽,正如所观察到的那样。