在这个例子中,我们将创建一个工作者包,它将用于同步和异步作业的处理情况。
包
尽管这个包做到了它所承诺的,但它还需要三个额外的功能。
-
终止长期运行的作业的能力。
-
关闭通道的能力。
-
能够杀死所有的工作者。
这个例子使用了 "无缓冲 "的工作通道。然而,如果你想限制作业的时间,你可以更新NewWorker() ,使用 "缓冲 "通道,如下所示。
func NewWorker(workerTotal, jobTotal int) Worker {
package worker
使用方法
异步的
这是一个异步(非阻塞)的例子,所以作业是随机处理的,没有顺序。程序从不退出。作业结果是独立打印的。拥有多个工作者是很重要的。
package main
1 running...
同步的
这是一个同步(阻塞)的例子,所以作业是按顺序一个接一个地处理的。程序在作业完成后退出。作业结果按顺序一个接一个地打印。拥有多个工作者是没有意义的,因为一次只能处理一个作业。
package main
1 running...