我知道对于普通的主轴驱动系统,使用多线程读取文件效率低下。
这是一个不同的情况,我有一个高吞吐量的文件系统可供我使用,它提供高达 3GB/s 的读取速度,具有 196 个 CPU 内核和 2TB RAM
单线程 Java 程序以最大 85-100 MB/s 的速度读取文件,因此我有可能比单线程更好。我必须读取大小为 1TB 的文件,并且我有足够的 RAM 来加载它。
目前我使用以下或类似的东西,但需要用多线程编写一些东西以获得更好的吞吐量:
Java 7 文件:50 MB/s
List<String> lines = Files.readAllLines(Paths.get(path), encoding);
Run Code Online (Sandbox Code Playgroud)
Java commons-io:48 MB/s
List<String> lines = FileUtils.readLines(new File("/path/to/file.txt"), "utf-8");
Run Code Online (Sandbox Code Playgroud)
与番石榴相同:45 MB/s
List<String> lines = Files.readLines(new File("/path/to/file.txt"), Charset.forName("utf-8"));
Run Code Online (Sandbox Code Playgroud)
Java 扫描程序类:非常慢
Scanner s = new Scanner(new File("filepath"));
ArrayList<String> list = new ArrayList<String>();
while (s.hasNext()){
list.add(s.next());
}
s.close();
Run Code Online (Sandbox Code Playgroud)
我希望能够以正确的排序顺序加载文件并尽可能快地构建相同的 ArrayList。
还有另一个问题读起来相似,但实际上不同,因为:问题是讨论多线程文件 I/O 在物理上不可能高效的系统,但由于技术进步,我们现在拥有的系统是旨在支持高吞吐量 I/O ,因此限制因素是 CPU/SW ,这可以通过 I/O 多线程来克服。
另一个问题没有回答如何为多线程 I/O …