4.3.0 延时事件机制改进
在4.3.0之前的版本,swoole_event_defer方法底层的延时事件机制,存在一些问题。
- 在
Reactor::wait之前创建的defer任务,没有事件发生时无法触发,为了解决此问题,底层会在这种情况下,将延时任务转换为1ms的定时器 - 在延时任务中添加延时任务,会在循环执行,而不是在下一次
epoll_wait后执行 - 延时任务无法阻挡
Reactor退出,导致某些延时任务可能会丢失
新版本改进了延时任务机制,现在更安全,代码更简洁。
- 有延时任务时,将
epoll_wait的超时事件设置为0,即使没有任何事件触发,依然可以立即去执行延时任务,而不依赖定时器 - 有延时任务时,
Reactor必须要全部执行完成后才会退出 - 在延时任务中添加延时任务,将会在下一次
epoll_wait后执行
