如何管理 Goroutine

为什么需要管理Goroutines

有效利用资源

虽然在Golang程序中,使用go func的方式开启一个goroutine协程是非常轻量级的操作。但是,完全不管理的任意创建,会造成很多资源的浪费。虽然golang本身提供了GC功能,但是GC释放是需要时机的。通过更加合理的创建goroutine对象可以更加有效的利用系统资源。

贴一个常见的资源问题:


for {
    go func(){
        fmt.Println("xxx")
    }()
}

这段代码可能造成两类对象资源的浪费:

  • 函数对象资源的浪费
  • goroutine资源的浪费

以上代码,读者可以长时间运行看看程序对于系统资源的占用情况。

上下文控制

随着程序复杂度的上升,goroutine通常也会随之增长。如何控制这些新创建的goroutine呢。这就需要通过context.Context上下文对象,进行父子级传递,完成父子goroutine的控制。

如何实现Goroutine的管理

除了以上两点原因之外,参考项目 github.com/x-mod/routine 中。

    原文作者:JayL
    原文地址: https://segmentfault.com/a/1190000018385905
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞