管理Goroutine的三种方式

管理Goroutine的三种方式waitGroup, channel, context的区别

waitGroup

  • 使用范围:
    1、当一个工作需要被拆分成多个子工作,需要等待全部的子工作处理完成后才能进行下一步工作的时候,一般使用waitGroup。

    channel

  • 使用范围:
    1、用于关闭goroutine。当有一个或几个Goroutine在后台执行一些任务的时候,在主程序结束前通过channel来通知这些goroutine关闭。
    2、用于在主程序获取当有一个或者任意个数的协程执行完毕,然后执行后续操作

    context

  • 描述
    done channel 可以在你的程序中流动并取消所有阻塞的并发操作。 看起来不错,但是还不完美,还不是很够用。
    如果我们可以在简单的通知上附加传递额外的信息; 如 为什么取消发生, 函数是否有需要完成的最后期限(超时), 这些情况下这些功能 非常有用。
  • 函数中取消有三种情况:
    1。 goroutine 的 父 goroutine 可能想要取消它。
    2。 一个goroutine 可能想要取消它的 子goroutine
    3。 goroutine 中呢任何阻塞操作都必须是可抢占的, 以便它可以被取消。
  • 适用范围:
    context相比于单独使用channel来通知goroutine关闭有着更加复杂的功能,适用于通知有多层的goroutine关闭。