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();
阅读 4.9k
2 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题