我收集了 1000 个 gz 格式的文件。我想并行处理它们,比如每轮 8 个。当我让每个线程打开一个文件并从磁盘读取时,由于许多进程尝试从不同位置读取,导致显着的延迟。
我只是想知道是否有一种有效的方法来处理多个文件读取?或者我应该先将所有文件缓冲到内存中(例如所有 8 个文件,然后将缓冲区交给线程)。如果是这样,缓冲文件的最佳方法是什么?缓冲区数组?或者一些替代结构?
谢谢。
最佳答案
如果您使用固定大小的池(例如 8 个)(因为您有 8 个核心),您可能会发现这是相当高效的,因为解压缩文件会占用 CPU 资源。
但是,您可能会发现这并不比使用 4 个线程或仅使用 2 个线程快,因为真正的瓶颈是从磁盘读取数据。如果是这种情况,您唯一能做的就是购买更快的磁盘。例如镜像磁盘,或使用速度快 20 倍的 SSD。
关于java - java中的缓冲输入文件和并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845315/