2011-07-13 60 views
1

如果我的代碼是將文件的每個字讀入ArrayListHashSet,將代碼拆分爲多個工作人員threads並分配每個文件塊以工作(假設多個核心)會更快嗎? ?我的直言不說,因爲在這種情況下,I/O通常會成爲瓶頸,而不是CPU。多個線程會將代碼從磁盤讀入內存嗎?

回答

2

這取決於。你認爲IO將成爲瓶頸的思路可能是正確的,因爲很多磁盤以串行方式工作。但是,如果該磁盤是特殊的SSD或真正支持併發訪問的RAID?另外,如果有大量CPU綁定後處理需要使用數據完成,那麼您可以在讀取另一批數據時同時進行。不要太快地註銷併發選項!

3

關閉常規驅動器的IO通道通常比物理介質本身可以提供的要快得多,所以IO不會成爲瓶頸。藉助磁性媒體(又稱標準硬盤),當磁頭尋找你正在閱讀的各個地方時,你會使磁盤瘋狂地瘋狂。性能會很糟糕,相當於一輛購物車沿着一條空的6路高速公路滾下去。

固態硬盤不會受到搜索懲罰,但它們並不普遍(或負擔得起)足夠的尚未計數。

+0

「常規驅動器的IO通道通常比物理介質本身可以提供的要快得多,所以IO不會成爲瓶頸。」 - 爲什麼? – GBa

+0

3Gbps和6Gbps SATA接口比標準驅動器物理吸取介質要快得多。最新的SSD,特別是Sandforce控制器,實際上可以接近(或超過)3Gbps。 –

+0

在SAN/NAS的情況下如何? – GBa