2014-06-24 42 views
0

我一直在玩一個簡單的光線追蹤器,一直在工作很整齊到目前爲止。我使用多個goroutine來渲染圖像的不同部分,然後將其結果放入共享電影中。不要使用CPU完全

與我的預期相反,我的代碼仍然比同等java代碼慢大約3倍。那是可以預料的嗎?此外,在檢查htop中的CPU使用情況時,我發現每個內核僅用於大約85%。這是htop的問題還是我的代碼有問題?這裏是我的應用程序的cpu profile

我確實設置了GOMAXPROCS爲runtime.GOMAXPROCS(runtime.NumCPU())。該full code is on github

+1

請貼出去和java代碼 – user634175

+0

您可能會創建太多需要在稍後銷燬的對象,或者使用append()很多。 100%以下的使用率可能表明您在goroutine之間使用的通信機制不是最佳的。您是使用渠道還是調整Java代碼以使用共享內存和互斥量? – siritinga

+0

您使用過GOMAXPROCS嗎? – fabrizioM

回答

0

我想,垃圾回收是問題。也許你正在做很多不必要的分配。通過使用runtime.ReadMemStats,您可以瞭解垃圾收集器運行的時間。

如果是這種情況,那麼你必須找到一種方法來減少內存分配。例如通過使用對象池。看看sync.Pool。還有幾個有用的鏈接,你可以通過谷歌找到解釋如何減少內存分配。例如,看看this one

+0

謝謝,我會嘗試。 – panmari