两个java进程同时读取一个文件(持续时间较长)会影响磁盘效率吗?

场景

一个100多万条的csv文件, 读取, 每行要处理, 处理时间平均每行250ms±.

  • 方案一: 每读一行, 处理一行, 处理好了, 读下一行.
  • 方案二: 一次读取出来, 放入内存, 然后遍历处理每一行.

后来, 发现一个java进程不够跑, 想多开几个, 发现开了3个的时候, Linux会自动给我杀死1-2个.

请问, 这种场景, 应该哪种方案更合理些? 原理又是什么呢?

阅读 4.6k
2 个回答

使用 Scanner 读取文件流,nextLine() 获取文件行,封装处理逻辑到任务(task)放到线程池中处理。

  1. 大文件、高行数的文件最好使用流的方式处理,避免一次吃掉太多内存;
  2. 线程池复用线程,节约资源。
  1. 开一个线程去读,放到缓存中,可以批量放入,达到一定阈值暂停放入。
  2. 开多个线程去缓存中拿数据,然后去处理。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题