我有一點創建迷宮的程序。它使用了大量的集合(默認變量,它是不可變的,或者至少用作不可變的)。斯卡拉是否自己做任何事情?
該程序計算30個尺寸增加的迷宮。使用理解(1至30)
由於使用最新版本的並行集合框架成爲可用我認爲給它一個旋轉,希望獲得一些性能。
這種失敗,並且當我調查一點,我發現了以下:
當沒有任何東西的任何調用遠程運行平行它仍顯示出對每一個4芯的約30%的處理器負載我的機器。
當我用(1到30).par替換範圍1到30時,CPU負載在所有內核(我預期)上升到約80%。迷宮完成的順序變得或多或少是隨機的(我預期)。所有迷宮的總時間保持不變。
用它們的平行計數器部件替換一些內部使用的集合似乎有效果。
我現在有2個問題:
爲什麼我有所有4個內核紡紗,雖然沒有任何在並行運行。
無論是否平行運行,程序仍然可能會同時運行的可能原因是什麼?有沒有其他明顯的瓶頸,但CPU週期(沒有IO,沒有網絡,充足的內存通過-Xmx設置)
在這個任何想法?
您應該製作一個不超過一頁並編譯的例子。否則,這只是太多的猜測。垃圾收集器是唯一可以在沒有做任何事情的情況下同時運行的東西。你的程序是否創建了很多對象,在創建後立即收集垃圾?這在功能性編程風格中是相當常見的...... – 2011-06-07 19:54:13
是的,我猜想會創建很多對象,所以GC可能是一個很好的候選對象。我將激活一些日誌記錄並查看它出來的內容。 – 2011-06-07 20:17:03
我看起來我沒有得到任何性能提升,因爲我在等待GC – 2011-06-09 13:52:46