Goroutines是重量轻的进程,由Go运行时自动将时间切片到一个或多个操作系统线程上。(这是Go的一个非常酷的特性!)
假设我有一个类似于like服务器的并发应用程序。在我的假设程序中,有很多事情同时发生,没有太多的非并发(Amdahl's Law)比率。
目前使用的操作系统线程的默认数量似乎是1,这是否意味着只使用一个CPU核心?
如果我开始我的节目
runtime.GOMAXPROCS(runtime.NumCPU())这是否能合理有效地利用的所有的核心在我的电脑上?
是否有任何“并行松懈”受益于使用更多的OS线程,例如通过一些启发。
runtime.GOMAXPROCS(runtime.NumCPU() * 2)发布于 2013-07-26 05:53:29
这个问题不能回答,它太宽泛了。
以你的问题,你的算法和你的工作量,衡量什么是最好的组合。
没有人能回答这样的问题:“在我的午餐中添加两倍的盐会让它味道更好吗?”因为这取决于你的午餐(西红柿比草莓从盐中获益更多),你的口味和已经有多少盐。试试看。
更重要的是:runtime.GOMAXPROCS(runtime.NumCPU())已经达到了邪教状态,但是通过从外部设置GOMAXPROCS环境变量来控制线程数可能是更好的选择。
发布于 2013-07-25 21:06:48
runtime.GOMAXPROCS()设置程序可以同时使用的(虚拟) CPU核心的数量。允许Go使用比实际多的CPU核心不会有帮助,因为您的系统只有那么多CPU核心。
为了在多个线程中运行,您的程序必须有几个goroutines,通常使用go someFunc()进行函数调用。如果您的程序没有启动任何额外的goroutines,那么它自然只会在一个线程中运行,不管您允许它使用多少CPU/核心。
查看这和下面关于如何创建goroutines的练习。
https://stackoverflow.com/questions/17868419
复制相似问题