From e0b27eca41970310cbd75bf7c87b1e4cde4f6b32 Mon Sep 17 00:00:00 2001 From: Xargin Date: Tue, 3 Jul 2018 11:43:19 +0800 Subject: [PATCH] update dj --- ch6-cloud/ch6-10-delay-job.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ch6-cloud/ch6-10-delay-job.md b/ch6-cloud/ch6-10-delay-job.md index 70d5cd9..1162e49 100644 --- a/ch6-cloud/ch6-10-delay-job.md +++ b/ch6-cloud/ch6-10-delay-job.md @@ -94,3 +94,11 @@ Go 自身的 timer 就是用时间堆来实现的,不过并没有使用二叉 ### 时间轮 ![timewheel](../images/ch6-timewheel.png) + +用时间轮来实现 timer 时,我们需要定义每一个格子的“刻度”,可以将时间轮想像成一个时钟,中心有秒针顺时针转动。每次转动到一个刻度时,我们就需要去查看该刻度挂载的 tasklist 是否有已经到期的任务。 + +从结构上来讲,时间轮和哈希表很相似,如果我们把哈希算法定义为:触发时间%时间轮元素大小。那么这就是一个简单的哈希表。在哈希冲突时,采用链表挂载哈希冲突的定时器。 + +除了这种单层时间轮,业界也有一些时间轮采用多层实现,这里就不再赘述了。 + +## 任务分发