PHP pthread,在池任务中,ob_flush和flush会导致崩溃


PHP pthreads, in pool tasks, ob_flush and flush cause crash

    $p = new Pool(10);
    for ($i = 0; i<1000; i++){
        $tasks[i] = new workerThread($i);
    }
    foreach ($tasks as $task) {
        $p->submit($task);
    }
    // shutdown will wait for current queue to be completed
    $p->shutdown();
    // garbage collection check / read results
    $p->collect(function($checkingTask){
        return ($checkingTask->isGarbage);
    });

class workerThread extends Collectable {
    public function __construct($i){
        $this->i= $i;
    }
    public function run(){
        echo $this->i;
        ob_flush();
        flush();
    }
}
上面的代码是一个会导致崩溃的简单示例。我试图通过放置ob_flush()和flush()来实时更新页面;在线程对象中,它基本上按预期工作。所以上面的代码不能保证每次都崩溃,但是如果你多运行几次,有时脚本会停止,Apache会重新启动,并出现错误消息"httpd.exe应用程序错误"。指令"0x006fb17f"引用内存"0x028a1e20"。内存无法"写入"。点击OK "

我认为这是由于多个线程试图同时刷新时的刷新冲突引起的?我能做些什么来处理它并在有任何新输出时刷新

多线程不应该写标准输出,没有安全的方法可以这样做。

Zend没有提供任何安全设施,它的工作是偶然的,并且永远是不安全的。