在这个例子中,我们将看到如何使用协程与通道实现一个工作池
这是worker程序,我们会并发的运行多个worker。worker将在jobs频道上接收工作,并在results上发送相应的结果。每个worker我们都会sleep一秒钟,以模拟一项昂贵的任务。
为了使用worker工作池并且收集其结果,我们需要2个通道
这里启用了3个worker,初始是阻塞的,因为还没有传递任务。
我们这里发送5个jobs,然后close这些通道,表示这些就是所有的任务了。
最后,我们收集所有这些任务的返回值。这也确保了所有的worker协程都已完成。另一个等待点多个协程的方式是使用WaitGroup
运行程序,显示5个任务被多个worker执行。尽管所有的工作总共要花费5秒钟,但该程序只花了2秒钟,因为3个worker是并行的
上一篇: 34、Ticker(打点器)
下一篇: 36、WaitGroup