Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中输入文件的缓冲和并行处理_Java_Multithreading_Io_Buffer - Fatal编程技术网

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

java中输入文件的缓冲和并行处理,java,multithreading,io,buffer,Java,Multithreading,Io,Buffer,我收集了1000个gz格式的文件。我想把它们分块并行处理,比如说每轮8个。当我让每个线程打开一个文件并从磁盘读取数据时,由于许多进程试图从不同的位置读取数据,导致了显著的延迟 我只是想知道是否有一种有效的方法来处理多个文件读取?或者我应该首先将所有文件缓冲到内存中(例如,所有8个文件,然后将缓冲区交给线程)。如果是这样,缓冲文件的最佳方式是什么?缓冲阵列?或者一些替代结构 多谢各位 我怀疑您的进程中有1000个线程。线程不是特别轻量级(例如,默认情况下,每个线程将占用512k的堆栈空间) 一个更

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

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


多谢各位

我怀疑您的进程中有1000个线程。线程不是特别轻量级(例如,默认情况下,每个线程将占用512k的堆栈空间)

一个更有效的模型可能是使用线程池(via)并将其调整为系统上同时线程的最佳数量(例如,您在上面建议了8个线程-我建议这在某种程度上取决于您拥有的免费CPU的数量)


每个
.gz
文件将由一个提交给执行器的
可调用的
表示,执行器将负责同时运行多个作业。

如果使用固定大小的池(例如8个核),您可能会发现这是相当有效的,因为解压缩文件需要大量cpu


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

谢谢。这就是我现在所做的,基于空闲CPU数量的固定池大小,每个文件都用一个可调用函数表示。这是没有效率的。