影响goroutine的因素';s的表现

影响goroutine的因素';s的表现,go,Go,我在使用goroutine时遇到一些奇怪的行为,请就我可能做错的事情提供建议或意见。以下是我的流程: 我正在使用goroutines同时执行模拟,但由于某种原因,我花费的时间随着我加入的goroutines数量的增加而增加,这使得我的模拟不可能在合理的时间内完成。以下是我注意到的事情: 对于每启动10k goroutine,计算时间将增加5秒 我看不出CPU或内存不足。然而,每10k goroutine的CPU使用量只会增加一点点。例如,当我放置200k goroutines时,CPU使用率约为

我在使用goroutine时遇到一些奇怪的行为,请就我可能做错的事情提供建议或意见。以下是我的流程:

我正在使用goroutines同时执行模拟,但由于某种原因,我花费的时间随着我加入的goroutines数量的增加而增加,这使得我的模拟不可能在合理的时间内完成。以下是我注意到的事情:

  • 对于每启动10k goroutine,计算时间将增加5秒

  • 我看不出CPU或内存不足。然而,每10k goroutine的CPU使用量只会增加一点点。例如,当我放置200k goroutines时,CPU使用率约为70%

  • 我没有用磁盘

  • 我在没有触发goroutines的情况下运行了模拟,它完成得非常快,所以慢是内部的,或者是goroutines造成的

  • 我尝试在每个goroutine中使用额外的goroutine来并行运行一些工作负载。CPU使用率提高到100%,但总体速度降低了50%

  • 我正在使用指针将一些大型结构传递给goroutines。所有goroutine使用相同的数据


  • 是否有人对我可能需要优化的事情有线索,或者建议我进行任何测试?谢谢

    启动几个“worker”goroutines,并通过频道向其发送“jobs”。您可以节省大量占用CPU的内存分配

    您的go例程是否正在修改结构的数据?如果您的所有go例程都在连续运行(即不阻塞i/O),那么您的go例程数量超过系统可以同时运行的线程数量,将不会获得任何性能优势。事实上,有更多的goroutine会减慢速度,因为在它们之间切换会产生开销。