为什么需要管理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 中。