修订历史
- 2023.02.21 创建笔记
ants 提供固定/无限容量的协程池,通过复用协程来执行任务,达到节省系统资源的目的。
协程池由三部分构成:Pool、Queue、Worker * n:
Pool 会启动一个回收 Worker 的协程,定时检查 Queue 中 Worker 的时间戳。
当 Worker 最近执行的时间与当前的时间间隔超过设定值,则回收该 Worker
Worker 的时间戳并不需要非常精确。可以通过缓存时间戳,来避免频繁调用系统函数:
Pool 会启动一个协程,每隔一段时间更新 Pool 的时间戳。当 Worker 任务执行完任务后,会以 Pool 的时间戳作为任务执行完成的时间。
协程池使用 sync.Pool 对象池来创建和回收 Worker。通过复用 Worker 对象,减轻 GC 负担。