簡體   English   中英

在java中處理大文件

[英]Processing huge files in java

我有一個大約10 GB的巨大文件。 我必須對Java中的文件執行排序,過濾等操作。 每個操作可以並行完成。

啟動10個線程並且並行讀取文件是否合適? 每個線程讀取1 GB的文件。 有沒有其他選項來解決超大文件的問題並盡快處理它們? NIO是否適合這種情況?

目前,我正在進行串行操作,處理此類文件大約需要20分鍾。

謝謝,

啟動10個線程並且並行讀取文件是否合適?

幾乎肯定不是 - 雖然它取決於。 如果它來自SSD(那里實際上沒有尋找時間)那么可能 如果它是傳統的磁盤,絕對不是。

這並不意味着您不能使用多個線程 - 您可能會創建一個線程來讀取文件,只執行最基本的任務以將數據轉換為可處理的塊。 然后使用生產者/消費者隊列讓多個線程處理數據。

在不知道“排序,過濾等”的情況下(這是非常模糊的)我們無法真正說明該過程的可並行化程度 - 但嘗試在單個文件上並行執行IO 可能無濟於事。

嘗試分析代碼以查看瓶頸所在。 您是否嘗試過讓一個線程讀取整個文件(或盡可能多),並將其交給10個線程進行處理? 如果文件I / O是您的瓶頸(這似乎是合理的),這將改善您的整體運行時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM