鍍金池/ 問答/Java  網(wǎng)絡安全/ 兩個java進程同時讀取一個文件(持續(xù)時間較長)會影響磁盤效率嗎?

兩個java進程同時讀取一個文件(持續(xù)時間較長)會影響磁盤效率嗎?

場景

一個100多萬條的csv文件, 讀取, 每行要處理, 處理時間平均每行250ms±.

  • 方案一: 每讀一行, 處理一行, 處理好了, 讀下一行.
  • 方案二: 一次讀取出來, 放入內(nèi)存, 然后遍歷處理每一行.

后來, 發(fā)現(xiàn)一個java進程不夠跑, 想多開幾個, 發(fā)現(xiàn)開了3個的時候, Linux會自動給我殺死1-2個.

請問, 這種場景, 應該哪種方案更合理些? 原理又是什么呢?

回答
編輯回答
膽怯
  1. 開一個線程去讀,放到緩存中,可以批量放入,達到一定閾值暫停放入。
  2. 開多個線程去緩存中拿數(shù)據(jù),然后去處理。
2018年9月4日 15:35
編輯回答
賤人曾

使用 Scanner 讀取文件流,nextLine() 獲取文件行,封裝處理邏輯到任務(task)放到線程池中處理。

  1. 大文件、高行數(shù)的文件最好使用流的方式處理,避免一次吃掉太多內(nèi)存;
  2. 線程池復用線程,節(jié)約資源。
2018年7月27日 02:48