PHPackages                             esd/hashed-wheel-timer-plugin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. esd/hashed-wheel-timer-plugin

ActiveProject[Utility &amp; Helpers](/categories/utility)

esd/hashed-wheel-timer-plugin
=============================

the HashedWheelTimer delay task

0.6(6y ago)3262Apache-2.0PHP

Since Jun 26Pushed 6y ago1 watchersCompare

[ Source](https://github.com/esd-projects/hashed-wheel-timer-plugin)[ Packagist](https://packagist.org/packages/esd/hashed-wheel-timer-plugin)[ RSS](/packages/esd-hashed-wheel-timer-plugin/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependencies (2)Versions (4)Used By (0)

hashed-wheel-timer-plugin
=========================

[](#hashed-wheel-timer-plugin)

HashedWheelTimer是采用一种定时轮的方式来管理和维护大量的Timer调度算法。 一个 HashedWheelTimer 是环形结构，类似一个时钟，分为很多槽，一个槽代表一个时间间隔，每个槽又对应一个类似Map结构的对象，使用双向链表存储定时任务，指针周期性的跳动，跳动到一个槽位，就执行该槽位的定时任务。 环形结构可以根据超时时间的 hash 值(这个 hash 值实际上就是ticks &amp; mask)将 task 分布到不同的槽位中, 当 tick 到那个槽位时, 只需要遍历那个槽位的 task 即可知道哪些任务会超时(而使用线性结构, 你每次 tick 都需要遍历所有 task), 所以, 我们任务量大的时候, 相应的增加 wheel 的 ticksPerWheel 值, 可以减少 tick 时遍历任务的个数.

本插件模拟java HashedWheelTimer 的实现。使用redis做持久存储。

配置方法
====

[](#配置方法)

配置一个环形结构池

```
hashedWheelTimer:
  db: default
  max_pending_timeouts: 100
  wheel:
    - {name: aaa, tick_duration: 1, ticks_per_wheel: 60 }

```

name 池子名称，投递任务的时候需要

tick\_duration，时间间隔，1秒

ticks\_per\_wheel，时间槽数量，60个，代表一分钟一个轮次

max\_pending\_timeouts，每一个槽允许的最大协程数，默认100，如果耗时任务或者队列特别长需要适当增加时间槽数量比如3600。不适合特别精准的延时场景。

db，使用的 redis 配置，强烈建议不要使用default，会占用http服务的连接数，应该复制一份配置专用

使用方法
====

[](#使用方法)

投递任务
----

[](#投递任务)

```
  //环形池名称，执行任务的类，投递参数，延迟执行时间，秒
  $this->addTask('aaa', TimerTask::class,['a'=>'b', 'time' => time()], 60);

```

投递类
---

[](#投递类)

投递的类需要继承 HashedWheelTimerRunnable

```
