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

拉菲斯
    $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();来实时更新页面。在Threaded Object中,它通常可以按预期工作。因此,不能保证上面的代码每次都会崩溃,但是如果您多次运行它,有时脚本会停止并且Apache会以错误消息“ httpd.exe Application error”重新启动。“ 0x006fb17f”处的指令引用了“ 0x028a1e20”处的内存“。无法将内存”写“。单击确定。”

我认为这是由于多个线程尝试同时刷新而导致的刷新冲突引起的?我应该怎么做才能解决它并刷新,因为有任何新的输出。

乔·沃特金斯

多个线程不应编写标准输出,没有安全的方法可以执行此操作。

Zend没有提供使它安全的功能,它是巧合的,并且永远是不安全的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章