2011-10-03 55 views
1

我想在2個線程的幫助下讀取500 MB的文件,以便讀取文件的速度會更快。有人請給我一些使用核心Java概念的任務代碼。使用MultiThreading更快地讀取文件

+7

在大多數設置中,限制因素將是磁盤讀取的速度,而不是嘗試執行讀取的線程數量......我希望您更可能引入爭用並減緩讀取down ... – forsvarir

+0

當您連續讀取文件時,操作系統會檢測到該文件併爲您讀取文件。即它有一個「線程」試圖自動讀取。 –

+0

您是否考慮過內存映射文件以提高性能?正如forsvarir所說,限制因素不可能是線程的數量。 – Adamski

回答

10

多線程不可能使代碼更快。這是因爲讀取文件是一個I/O綁定進程。你將受到磁盤速度的限制,而不是你的處理器。

+1

+1:文件讀取的解析通常比讀取文件的時間更長。這部分可能受益於使用多個CPU。但是,文件的簡單閱讀不會。 –

3

而不是嘗試多線程讀取,您可能會受益於多線程處理數據。這可以使它看起來像使用多線程來讀取可以提供幫助,但實際上,使用一個線程來讀取並且多線程來處理通常會更好。

這通常需要更長時間並且受CPU限制。使用多線程讀取文件通常有助於在不同物理磁盤上存在多個文件(極少數情況下)

+0

@Lawrey:'當你在不同的物理磁盤上有多個文件時''通常會有所幫助。我認爲即使在同一個磁盤上,它也有助於多個文件。不是嗎? – Cratylus

+0

+1在不同的物理磁盤上。我有兩臺機器分別具有4個和8個HD(未配置)以通過線程獲得更高的磁盤速度。 – Mysticial

+0

您可以使用多個線程在同一文件系統上訪問多個文件獲得保證金優惠。根據文件放置在磁盤上的位置,操作系統可以選擇下一個要讀取的文件。然而,它可能會變得更糟。 –

0

雖然使用多線程讀取文件可能無法加快從光盤讀取的速度通過不在與讀取相同的線程中進行處理來完成該過程。 這將取決於文件的內容。