2017-05-03 113 views
0

我正在使用goroutine遇到一些奇怪的行为,请提供建议或评论我可能做错的事情。这是我的过程:影响goroutine性能的因素

我正在使用goroutines同时执行模拟,但由于某些原因,我花费的时间随着我放入的goroutines数量增加,使得我的模拟无法在合理的时间内完成。下面是我看到的东西:

  1. 每10K够程启动,由5秒

  2. 计算时间的增加,我不看到CPU或内存不足。但是,对于每10k个例程,CPU使用率仅增加一点点。例如,当我把20万个够程,CPU使用率在70%左右,我没有使用磁盘

  3. 我跑了模拟而不触发够程,它完成得非常快,所以是缓慢的内部或

  4. 由于goroutines

  5. 我试图在每个goroutine内部1次使用额外的goroutines来并行运行一些工作量。 CPU使用率提高到100%,但总体速度下降50%...

  6. 我正在通过一些大的结构使用指针的goroutines。所有的goroutines使用相同的数据。

有没有人对我可能需要优化的东西有任何线索,或者建议我进行任何测试?谢谢!

+0

你的程序是否正在修改结构的数据? – Acidic

+5

如果所有的例程都连续运行(即不阻塞I/O),那么通过拥有比系统可同时运行的线程数更多的goroutine,您将不会获得任何性能优势。事实上,拥有更多的goroutines会减慢速度,因为它们之间的切换涉及到开销。 –

回答

0

启动少量“工人”工作室并发送“工作”到其通道。您节省了许多消耗大量CPU的内存分配。