首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
定时器tick函数存在协程api时,下个定时器不会等待前一个执行完成吗?
### 问题描述 下面的代码,每秒钟还是会输出aaa 根据文档说明: 但如果定时器回调函数的执行时间过长,甚至覆盖了下一次定时器执行的时间。底层会进行时间校正,丢弃已过期的行为,在下一时间回调。 ### Swoole版本,PHP版本,以及操作系统版本信息 swoole 4.4.x php7.2.x ### 相关代码 ```php <?php use Swoole\Runtime; Runtime::enableCoroutine(SWOOLE_HOOK_ALL); Swoole\Timer::tick(1000, function(){ echo "aaa\n"; sleep(3); }); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么?
发布于5年前 · 9 次浏览 · 来自
提问
yiyi
### 问题描述 下面的代码,每秒钟还是会输出aaa 根据文档说明: 但如果定时器回调函数的执行时间过长,甚至覆盖了下一次定时器执行的时间。底层会进行时间校正,丢弃已过期的行为,在下一时间回调。 ### Swoole版本,PHP版本,以及操作系统版本信息 swoole 4.4.x php7.2.x ### 相关代码 ```php <?php use Swoole\Runtime; Runtime::enableCoroutine(SWOOLE_HOOK_ALL); Swoole\Timer::tick(1000, function(){ echo "aaa\n"; sleep(3); }); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么?
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2021-06-03
sff
sleep放echo前面
赞
0
回复
2021-06-03
MARiA
你好,这是我的个人见解。 我想应该是你的sleep时间大于定时器的间隔才会出现每秒钟还是会输出aaa。 而且你开启了Runtime::enableCoroutine(SWOOLE_HOOK_ALL),sleep就变为了一个非阻塞函数,其作用是在3秒后切换协程栈,并执行原本的函数。
赞
0
回复