2011-10-03 59 views
1

我想在2个线程的帮助下读取500 MB的文件,以便读取文件的速度会更快。有人请给我一些使用核心Java概念的任务代码。使用MultiThreading更快地读取文件

+7

在大多数设置中,限制因素将是磁盘读取的速度,而不是尝试执行读取的线程数量......我希望您更可能引入争用并减缓读取down ... – forsvarir

+0

当您连续读取文件时,操作系统会检测到该文件并为您读取文件。即它有一个“线程”试图自动读取。 –

+0

您是否考虑过内存映射文件以提高性能?正如forsvarir所说,限制因素不可能是线程的数量。 – Adamski

回答

10

多线程不可能使代码更快。这是因为读取文件是一个I/O绑定进程。你将受到磁盘速度的限制,而不是你的处理器。

+1

+1:文件读取的解析通常比读取文件的时间更长。这部分可能受益于使用多个CPU。但是,文件的简单阅读不会。 –

3

而不是尝试多线程读取,您可能会受益于多线程处理数据。这可以使它看起来像使用多线程来读取可以提供帮助,但实际上,使用一个线程来读取并且多线程来处理通常会更好。

这通常需要更长时间并且受CPU限制。使用多线程读取文件通常有助于在不同物理磁盘上存在多个文件(极少数情况下)

+0

@Lawrey:'当你在不同的物理磁盘上有多个文件时''通常会有所帮助。我认为即使在同一个磁盘上,它也有助于多个文件。不是吗? – Cratylus

+0

+1在不同的物理磁盘上。我有两台机器分别具有4个和8个HD(未配置)以通过线程获得更高的磁盘速度。 – Mysticial

+0

您可以使用多个线程在同一文件系统上访问多个文件获得保证金优惠。根据文件放置在磁盘上的位置,操作系统可以选择下一个要读取的文件。然而,它可能会变得更糟。 –

0

虽然使用多线程读取文件可能无法加快从光盘读取的速度通过不在与读取相同的线程中进行处理来完成该过程。 这将取决于文件的内容。