我构建了一个简单的goroutine
有几个 worker 池chan
对于一系列事件,它工作得很好。由于 goroutines
的性质我开始问自己,除了限制并发工作人员之外,我还能得到什么。 gorutines
它们本身没有任何在每次执行时重用的状态,因此保留它们是有值(value)的。
所以问题是,开始 goroutines
是否有意义?并重复使用它们,还是总是创建一个新的并限制同时创建/运行的数量?
最佳答案
由于 goroutine 是一个执行函数,因此可以将其视为包含以下资源集:
- 它执行的代码;
- Go 运行时调度程序为该 goroutine 维护的状态;
- goroutine 私有(private)的状态。
后者是 Goroutine 在本地分配的值 (在其堆栈上)和在堆上。
代码已共享; 调度程序中的状态的成本可以忽略不计 但是 goroutine 保持的状态可能重新创建的成本很高。
后一点可以作为保留 goroutine 的理由 在水池周围。但另一方面,大多数时候它更简单 汇集执行类似任务的 goroutine 的资源组 重用——而不是 goroutine 本身。
关于multithreading - Goroutine 池是否像其他语言中的线程池一样有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48659334/