返回介绍

1.12.3 定时器注意事项

发布于 2020-05-17 11:52:41 字数 3975 浏览 1040 评论 0 收藏 0

定时器使用注意事项

1、只能在onXXXX回调中添加定时器。全局的定时器推荐在onWorkerStart回调中设置,针对某个连接的定时器推荐在onConnect中设置。

2、添加的定时任务在当前进程执行(不会启动新的进程或者线程),如果任务很重(特别是涉及到网络IO的任务),可能会导致该进程阻塞,暂时无法处理其它业务。所以最好将耗时的任务放到单独的进程运行,例如建立一个/多个Worker进程运行

3、当前进程忙于其它业务时或者当一个任务没有在预期的时间运行完,这时又到了下一个运行周期,则会等待当前任务完成才会运行,这会导致定时器没有按照预期时间间隔运行。也就是说当前进程的业务都是串行执行的,如果是多进程则进程间的任务运行是并行的。

4、需要注意多进程设置了定时任务造可能会造成并发问题,例如下面的代码每秒会打印5次。

$worker = new Worker();
// 5个进程
$worker->count = 5;
$worker->onWorkerStart = function($worker) {
    // 5个进程,每个进程都有一个这样的定时器
    Timer::add(1, function(){
        echo "hirn";
    });
};
Worker::runAll();

如果只想要一个进程运行定时器,参考Timer::add 示例2

5、可能会有1毫秒左右的误差。

6、定时器不能跨进程删除,例如a进程设置的定时器无法在b进程直接调用Timer::del接口删除

7、不同进程间的定时器id可能会重复,但是同一个进程内产生的定时器id不会重复

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文