multithreading - Goroutine 池是否像其他语言中的线程池一样有意义?

标签 multithreading go goroutine

我构建了一个简单的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/

相关文章:

python - 线程与异步

java - 如何在不使用 sun.misc.Unsafe 的情况下触发完整的内存栅栏?

json - golang json 解码 map[string]interface{} 的一部分

go - 我可以在使用预停止 Hook 进行硬驱逐之前优雅地终止进程吗?

go - 在选择中未准备好向 channel 发送值

go - 在 go http 处理程序中使用 goroutine 和 channel 使 ResponseWriter 被阻塞

java - 再次出现 NullPointerException - intersects()

java - 在运行中停止播放剪辑

戈朗 : Automatic Refresh of a HTTP Page

go - 在没有锁的情况下并发读取函数指针是否安全?