Goroutine的并发控制

作者: 超鸽带你飞 | 来源:发表于2021-03-14 23:59 被阅读0次

    模拟一下协程数量太多的危害:

    func main() {
      number := math.MaxInt64
      for i := 0; i < number; i++ {
        go func(i int) {
          // 做一些业务逻辑处理
          fmt.Printf("go func: %d\n", i)
          time.Sleep(time.Second)
        }(i)
      }
    

    number过大,服务器系统资源利用率不断上涨,到最后程序自动killed

    协程池解决?

    池化要解决的问题①是频繁创建的开销,②是在等待时占用的资源。

    goroutine没必要协程池!原因如下:

    1. goroutine 和普通线程相比,创建和调度都不需要进入内核,也就是创建的开销已经解决了。同时
    2. 相比系统线程,内存占用也是轻量的。所以池化技术要解决的问题goroutine 都不存在

    通过channel和sync方式限制协程数量

    相关文章

      网友评论

        本文标题:Goroutine的并发控制

        本文链接:https://www.haomeiwen.com/subject/cwrhcltx.html