Skip to content

并发编程常见模式:任务队列、工作池与取消 ​

修订于 2026-10-12。代码与容量应按具体语言和负载验证。

并发设计先解决“谁拥有数据”“能有多少任务同时运行”“任务失败后怎么办”。工作池、队列和信号量是控制这些问题的工具,不能靠增加线程数或协程数无上限地提高吞吐。

工作池 ​

把任务放入有界队列,由固定数量的工作者处理。队列满时要明确策略:等待、拒绝、降级还是落盘。工作者数量取决于 CPU、I/O 等待、下游容量和任务耗时分布,不能使用通用固定值。

生产者与消费者 ​

生产速度持续大于消费速度时,积压会增长。监控队列长度、等待时间、处理失败与最老任务年龄;只看每秒处理量可能掩盖延迟。业务上还需决定重复任务、顺序和重试语义。

取消与共享状态 ​

请求取消应传递给子任务,并释放连接、文件句柄和队列占用。共享可变状态需要同步:锁、原子操作或通过消息传递明确所有权。原子计数器只保证相应操作的原子性,不能让一组跨字段业务更新自动成为事务。

测试应覆盖竞争、任务中断、队列溢出和优雅关闭。对 Go 程序可使用竞态检测器发现部分数据竞争,但通过检测也不证明没有逻辑竞态。

参考资料 ​

梧桐和风 · 让复杂的技术讲得更清楚