1 在Timer内创建协程,是否可行?假设Timer已经轮询到期(示例中2.5秒),协程内的执行是否会继续(假设2.5秒内都无法执行完毕这个协程?)
$timer_id = Timer::add(2.5, function() {
Coroutine::create(function () {
$this->coroutine()
}
});
2 在协程内创建Timer,是否可行?是否这个协程的生命周期会用不结束?
Coroutine::create(function () {
Timer::add(2.5, function() {
echo 111;
}
}
找不到
Timer不需要在
xx中创建
这种前条件,本身只在事件循环中增加了一个事件,至于事件触发的时候你要做什么比如开启一个协程
做某些事情是独立的两个逻辑。可能你担心的阻塞问题是因为Fiber
驱动下不是所有的函数都是非阻塞的,导致使用这些函数时你觉得Timer会阻塞。非也,我是用swoole驱动,单纯只是想了解下这两种的情况。
本身定时器执行回调的时候,会主动帮你创建协程的。
Swoole定时器的回调由事件循环自动调度至新协程中执行,因此每个回调都能运行完毕而不会被中断。此外,只要事件循环本身不被阻塞,定时器就能持续且准时地触发后续回调。
谢谢