Go 采用 goroutine 和 channel 实现工作池
假设有一组任务需要异步处理且量很大,那我们需要同时开启多个 worker 以保证任务的处理速度而不会堵塞任务。其他语言,可能会需要开启多进程来完成,多进程的控制、IO 消耗等会是个需要注意的问题,而这些 Go 都能帮我们很轻易的解决。
大致的实现要点和流程:
- 创建2个信道,messages 用于传送任务消息,result 用于接收消息处理结果
- 创建3个 Worker 协程,用于接收和处理来自 messages 信道的任务消息,并将处理结果通过信道 result 返回
- 通过信道 messages 发布10条任务
- 通过信道 result 接收任务处理结果