ants 源码分析

21 Feb 2023 | net, code

修订历史

  • 2023.02.21 创建笔记

ants 提供固定/无限容量的协程池,通过复用协程来执行任务,达到节省系统资源的目的。

协程池由三部分构成:Pool、Queue、Worker * n:

实现细节

回收空闲的 Worker

Pool 会启动一个回收 Worker 的协程,定时检查 Queue 中 Worker 的时间戳。

当 Worker 最近执行的时间与当前的时间间隔超过设定值,则回收该 Worker

缓存当前时间戳

Worker 的时间戳并不需要非常精确。可以通过缓存时间戳,来避免频繁调用系统函数:

Pool 会启动一个协程,每隔一段时间更新 Pool 的时间戳。当 Worker 任务执行完任务后,会以 Pool 的时间戳作为任务执行完成的时间。

对象池

协程池使用 sync.Pool 对象池来创建和回收 Worker。通过复用 Worker 对象,减轻 GC 负担。


Older · View Archive (37)

Muduo 网络库笔记

Newer

Haskell 拓展