Goroutine 数量是越多越好吗?

参考解析

题目来源:百度

答案:

  1. 协程具体开多少个主要根据不同的业务场景来决定

协程那么小 随便开啊,这其实是不正确的思想,协程虽然小,但是也是资源,且大量goroutine切换也需要消耗很多资源。
因此在真正的生产环境中,需要对自己的业务设计一个协程池,复用协程。

  1. 开很多会导致主进程奔溃

默认goroutine 最大开启数量是10k,但是如果不用channel | sync.WaitGroup控制,一般程序回直接崩溃

goroutine的限制

理论上会受内存的影响,假设一个 Goroutine 创建需要 4k:

4k * 80,000 = 320,000k ≈ 0.3G内存
4k * 1,000,000 = 4,000,000k ≈ 4G内存
以此就可以相对计算出来一台单机在通俗情况下,所能够创建 Goroutine 的大概数量级别。

开启过多协程造成影响

在Golang中,Goroutine虽然很好,但是数量太多了,往往会带来很多麻烦,比如耗尽系统资源导致程序崩溃,或者CPU使用率过高导致系统忙不过来。