Swoole的Timer::after和Timer::tick有什么本质区别

Timer::after用于一次性延迟执行,适合延迟操作如5秒后关闭连接,执行后自动销毁;Timer::tick用于周期性重复执行,适合心跳上报、定期清理等任务,需手动清除才能停止。两者共用事件循环,但生命周期不同:after自动释放,tick需调用clear停止。

Swoole的Timer::after和Timer::tick有什么本质区别

Swoole的Timer::afterTimer::tick虽然都是用于定时任务,但它们在执行逻辑和使用场景上有本质区别

Timer::after:一次性延迟执行

这个方法用于在指定毫秒后执行一次回调函数。它相当于设置一个“延时任务”,时间到了就触发一次,然后自动销毁。

  • 只执行一次
  • 适合做延迟操作,比如5秒后关闭连接、100ms后重试请求
  • 底层基于最小堆管理定时器,到期后自动移除

示例:SwooleTimer::after(2000, function() { echo “2秒后执行”; });

Timer::tick:周期性重复执行

这个方法会每隔指定毫秒执行一次回调,属于周期性任务,除非手动清除,否则会一直运行。

Swoole的Timer::after和Timer::tick有什么本质区别

魔乐社区

天翼云和华为联合打造的AI开发者社区,支持AI模型评测训练、全流程开发应用

Swoole的Timer::after和Timer::tick有什么本质区别102

查看详情 Swoole的Timer::after和Timer::tick有什么本质区别

  • 反复执行,按固定间隔触发
  • 适合做轮询、心跳上报、定期清理等持续性任务
  • 每次触发后重新入堆,等待下一次调度

示例:SwooleTimer::tick(1000, function() { echo “每1秒执行一次”; });

本质上,after是单次定时器,tick是循环定时器。两者共用Swoole的全局事件循环,但生命周期管理不同:after执行完自动释放ID,而tick需调用clear手动停止。

基本上就这些,用哪个取决于你要执行的任务是一次性的还是周期性的。

回调函数 区别 swoole swoole echo 回调函数 循环 function 事件

上一篇
下一篇