有谁知道大约需要多少最小工作量才能使 goroutine 受益(假设有空闲核心可以卸载工作)?
4 回答
我一直在用 Go 艰难地完成 euler 项目。虽然我没有给你一个明确的答案,但我发现 Go 文档中基于 goroutine 的素数筛比简单地检查每个数字的素数要慢一个数量级。将 GOMAXPROCS 设置为更高的值也无济于事。
goroutine 是一种抽象,如果它可以帮助您更好地建模应用程序,则可以使用它。您正在进行面向并发的编程,因此请考虑您的应用程序中具有并发性的部分。
考虑一个 OO 系统,并想象同样的问题是否应该实例化一个对象。
先做有意义的事。
使用 goroutine 不仅仅关乎硬件效率。有时它们使软件更容易编写,并且更容易排除错误。该语言允许程序员自然而简单地表达并发性。这对我来说很有价值。
我自己对自然候选并发问题的经验是,很容易让我使用简单的“分散/收集”方法最大限度地利用 CPU 绑定问题的所有可用内核。你的旅费可能会改变。
布亭
goroutine 是轻量级的,不占用太多资源。您应该在适合问题的任何地方使用它们。目前,go 似乎并不擅长使用多核(似乎在分配额外的主机线程时开销太大了。)
我认为真正的问题是何时使用多核而不是何时使用 goroutine。答案可能与其他语言和其他主机进程相同。(不幸的是,你不能轻易地指定一个 goroutine 何时应该占用一个新的宿主进程或它应该占用哪个进程。)