swoole协程中sleep为什么会导致死锁?

swoole版本:4.8.9
现象:运行代码提示“[FATAL ERROR]: all coroutines (count: 1) are asleep - deadlock!”
代码如下:

<?php

use Swoole\Process;

class DeadLock
{
    public function startProcess()
    {
        $t = new Swoole\Process(function () {
            swoole_async_set(['enable_coroutine' => true]);
            go(function (){
                for (; ;) {
                    Swoole\Coroutine\System::sleep(1);
                    var_dump('dd');
                }
            });
        });
        $t->start();
    }
}

$proc = new Process(function () {
    swoole_async_set(['enable_coroutine' => false]);
    $cls = new DeadLock();
    //$cls->startProcess(); //此处调用不会报错
    \Swoole\Timer::after(1000, function () use ($cls) {
        $cls->startProcess();//此处调用会报错
    });
});
$proc->start();
阅读 5.6k
2 个回答

你没开启一键协程化吧. sleep把进程给停了.

推荐问题