PHP pthreads,在池任务中,ob_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 Application error The instruction at "0x006fb17f" referenced memory at "0x028a1e20" .内存不能"Written".点击确定.

我认为是多个线程在大约同一时间尝试刷新时发生刷新冲突造成的?我可以做些什么来解决它并刷新,因为有任何新的输出。

多线程不应该写标准输出,没有安全的方法来做到这一点。

Zend 没有提供使其安全的工具,它的工作是巧合的,并且永远是不安全的。