Swoole定时器实现毫秒级任务调度

简介

`Timer` 毫秒精度的定时器,底层基于 `epoll_wait` 和 `setitimer` 实现,数据结构使用`最小堆`,可支持添加大量定时器,使用最小堆数据结构实现的定时器,类似 JavaScript 的 `setInterval`,`Swoole` 定时器的添加和删除,全部为内存操作,因此性能是非常高的。

Swoole 中的 `Timer` 与 `PHP` 本身的 `pcntl_alarm` 是不同的。`pcntl_alarm` 是基于 `时钟信号 + tick` 函数实现,一个是最大仅支持到秒,另一个是不支持同时设定多个定时器程序,性能相对来说会比较差。

间隔时钟定时器

我们可以通过 `Timer::tick` 来实现间隔时钟定时器,定时器会持续触发,每隔指定时间自动触发执行回调函数, 直到调用 `Timer::clear` 来清除指定的定时器。

$i = 0;

Swoole\Timer::tick(1000, function($id) use ($i) {

   global $i;

   echo "tick id:$id i:$i \n";

   $i++;

});

- 每隔1秒时间触发一次回调函数, 回调函数会自动打印一行信息到控制台。

一次性定时器

需要执行一次定时器的时候可以使用 `Timer::after` , 此函数是一个一次性定时器,与间隔时钟定时器不同,执行完成后就会销毁,需要注意的是 `Timer::after` 是非阻塞的。

Swoole\Timer::after(2000, function () {

  &nbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源商城源码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值