使用Golang的同步和异步工作者实例

86 阅读1分钟

在这个例子中,我们将创建一个工作者包,它将用于同步和异步作业的处理情况。

尽管这个包做到了它所承诺的,但它还需要三个额外的功能。

  • 终止长期运行的作业的能力。

  • 关闭通道的能力。

  • 能够杀死所有的工作者。

这个例子使用了 "无缓冲 "的工作通道。然而,如果你想限制作业的时间,你可以更新NewWorker() ,使用 "缓冲 "通道,如下所示。

func NewWorker(workerTotal, jobTotal int) Worker {
package worker

使用方法

异步的

这是一个异步(非阻塞)的例子,所以作业是随机处理的,没有顺序。程序从不退出。作业结果是独立打印的。拥有多个工作者是很重要的。

package main
1 running...

同步的

这是一个同步(阻塞)的例子,所以作业是按顺序一个接一个地处理的。程序在作业完成后退出。作业结果按顺序一个接一个地打印。拥有多个工作者是没有意义的,因为一次只能处理一个作业。

package main
1 running...