Go Worker Pool 的两种思路实现
· 阅读需 8 分钟
写带结果收集的 worker pool,任务分发通常不难。真正容易写岔的是怎么停。
停之前先把这两个问题答死,后面实现几乎是顺水推舟:
- 已经进队、还没被 worker 拿走的任务,还要不要做?
- 已经做完、结果还没发出去的任务,结果能不能丢?
对这两个问题的回答不同,中断机制和 API 形态就会分叉。下面按这两种答案,分别看实现。
关于Go语言的相关文章
查看所有标签写带结果收集的 worker pool,任务分发通常不难。真正容易写岔的是怎么停。
停之前先把这两个问题答死,后面实现几乎是顺水推舟:
对这两个问题的回答不同,中断机制和 API 形态就会分叉。下面按这两种答案,分别看实现。
从 JavaScript / TypeScript 转过来学 Go 时,最容易困惑的一点是:Go 到底是"值传递"还是"引用传递"?答案是——Go 只有值传递,没有引用传递。但偏偏 slice、map、channel 这些类型用起来又像"引用"。这篇随记就来理清这层看似矛盾的关系:什么是引用语义、如何用指针显式取引用,以及为什么 channel、func、context 这些类型天生就不需要你再套一层指针。