2017-05-03 33 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的內存分配。