Parallel processing goroutine的最小工作大小

Parallel processing goroutine的最小工作大小,parallel-processing,go,goroutine,Parallel Processing,Go,Goroutine,是否有人知道goroutine要发挥作用所需的最小工作大小(假设有空闲的内核供工作卸载到)?我一直在用Go缓慢地完成euler项目。虽然我没有一个明确的答案,但我发现Go文档中基于goroutine的素性筛选比简单地检查每个数字的素性慢一个数量级。将GOMAXPROCS设置为更高的值也没有帮助 goroutine是一种抽象,如果它能帮助您更好地建模应用程序,您可以使用它。您正在进行面向并发的编程,因此请考虑应用程序中具有并发性的部分 考虑一个OO系统,想象一下你是否应该实例化一个对象 首先做有意

是否有人知道goroutine要发挥作用所需的最小工作大小(假设有空闲的内核供工作卸载到)?

我一直在用Go缓慢地完成euler项目。虽然我没有一个明确的答案,但我发现Go文档中基于goroutine的素性筛选比简单地检查每个数字的素性慢一个数量级。将GOMAXPROCS设置为更高的值也没有帮助

goroutine是一种抽象,如果它能帮助您更好地建模应用程序,您可以使用它。您正在进行面向并发的编程,因此请考虑应用程序中具有并发性的部分

考虑一个OO系统,想象一下你是否应该实例化一个对象


首先做有意义的事情。

goroutines是轻量级的,不会占用太多资源。您应该在任何适合问题的地方使用它们。目前,go似乎并不特别擅长使用多个内核(分配额外的主机线程的开销似乎有点太大)


我认为真正的问题是何时使用多核,而不是何时使用goroutine。答案可能与其他语言和其他主机进程的答案相同。(不幸的是,您无法轻松指定goroutine何时应该占用新主机进程或它应该占用哪个进程。)

使用goroutine不仅仅是为了提高硬件效率。有时,它们使软件更容易编写,也更容易排除bug。该语言允许程序员自然而简单地表达并发性。这对我来说很有价值

我自己对并发性的自然候选问题的经验是,go轻松允许我使用一种简单的“分散/聚集”方法,最大限度地利用CPU限制问题上的所有可用内核。您的里程可能会有所不同


Hotei

你可能会在Go邮件列表中得到一个更好的答案:@RCIX:是的,如果结果是独立的,或者可以分解为独立的块,那么并行化只会有助于提高速度。然而,基本筛选明确地依赖于之前的结果:如果在任何给定时间除了一个goroutine之外所有goroutine都阻塞,那么它就不是真正的并行。确切地说,goroutine“只是”一个非常有用的概念抽象来组织您的程序。它们通过简化并行化来帮助提高性能,这只是一个很好的副作用。go-routines实际上并不分配新线程,因为这些例程在现有系统线程上是多线程的。它基本上归结为何时使用多核是有益的;然而,答案与其他语言不一样,因为其他类似语言(C、C++、java)没有内置的并行结构,必须手动管理或使用像OpenMPYE这样的预编译结构,我理解。在分配主机进程不合适的情况下,使用goroutine时,主机进程的数量应该受到限制,我的帖子对此进行了评论。