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

发布于 2022-09-07 20:22:37 字数 251 浏览 20 评论 0

场景

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

守护在此方 2022-09-14 20:22:37

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

  1. 大文件、高行数的文件最好使用流的方式处理,避免一次吃掉太多内存;
  2. 线程池复用线程,节约资源。
止于盛夏 2022-09-14 20:22:37
  1. 开一个线程去读,放到缓存中,可以批量放入,达到一定阈值暂停放入。
  2. 开多个线程去缓存中拿数据,然后去处理。
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文