我注意到下面的代碼使用多線程並保持所有CPU核心在讀取文件時100%左右忙碌。爲什麼scala.io.Source使用所有內核?
scala.io.Source.fromFile("huge_file.txt").toList
和我假定以下是相同的
scala.io.Source.fromFile("huge_file.txt").foreach
我中斷將該代碼作爲我開發機器上Eclipse調試器下一個單元測試(OS X 10.9.2)和表示這些線程:主,ReaderThread,3守護進程系統線程。 htop
顯示如果我在24核心服務器機器(ubuntu 12)的scala控制檯中運行此線程,所有線程都很忙。
問題:
- 如何限制使用的線程N多的代碼?
- 爲了理解系統性能,您能否向我解釋io.Source中爲什麼以及如何完成這個任務?閱讀源代碼不會有幫助。
- 我假設每一行都是按順序讀取的;然而,因爲它使用多線程,所以
foreach
在多線程中運行?我的調試器似乎告訴我,代碼仍然在主線程中運行。
任何洞察力將不勝感激。
你確定你沒有在所有線程上看到垃圾收集器活動? –
我不這麼認爲,因爲所有24核心在製作清單時接近100%。暫時的物體清潔不應該造成我認爲的沉重負擔。 – user2949165
也許你應該確保使用'-XX:+ UseSerialGC'? –