java - java中的缓冲输入文件和并行处理

标签 java multithreading io buffer

我收集了 1000 个 gz 格式的文件。我想并行处理它们,比如每轮 8 个。当我让每个线程打开一个文件并从磁盘读取时,由于许多进程尝试从不同位置读取,导致显着的延迟。

我只是想知道是否有一种有效的方法来处理多个文件读取?或者我应该先将所有文件缓冲到内存中(例如所有 8 个文件,然后将缓冲区交给线程)。如果是这样,缓冲文件的最佳方法是什么?缓冲区数组?或者一些替代结构?

谢谢。

最佳答案

如果您使用固定大小的池(例如 8 个)(因为您有 8 个核心),您可能会发现这是相当高效的,因为解压缩文件会占用 CPU 资源。

但是,您可能会发现这并不比使用 4 个线程或仅使用 2 个线程快,因为真正的瓶颈是从磁盘读取数据。如果是这种情况,您唯一能做的就是购买更快的磁盘。例如镜像磁盘,或使用速度快 20 倍的 SSD。

关于java - java中的缓冲输入文件和并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845315/

相关文章:

java - KeyListener(java)的多键检测

java - 在 Android 中将字符串转换为 Java 源代码

java - 当他们说 StringBuffer 类是同步的时,到底是什么意思?该类的所有方法都声明为同步的吗?

c# - 从头开始异步处理

c++ - 使用Qt替换C++文件中的文本

java - 检查文件结尾未按预期工作

java - 搜索用于将 GUI 组件写入 PDF 的 Java 库或第 3 方库

java - ThreadLocal initialValue() 每个线程调用多次。为什么?

不同线程和 GIL 上的 Python 回调

c++ - 是否有良好的 C++ I/O 使用示例