【发布时间】:2015-08-15 12:08:43
【问题描述】:
对于我正在进行的一个项目,我正在尝试尽可能快地计算文本文件中的元音。为了做到这一点,我正在尝试一种并发方法。我想知道是否可以同时读取文本文件以加快计数速度?我相信瓶颈是 I/O,因为现在我正在通过缓冲读取器读取文件并逐行处理,所以我想知道是否可以一次读取文件的多个部分。
我最初的想法是使用 Split File - Java/Linux
但显然 MappedByteBuffers 在性能方面并不是很好,一旦我拆分,我仍然需要从每个 MappedByteBuffer 中逐行读取。
另一种选择是在读取一定数量的行后进行拆分,但这违背了目的。
不胜感激。
【问题讨论】:
-
这部分是你程序中最耗时的部分吗?也许你可以缓存它。
-
除非您有一个非常大的 RAID 0 阵列或一个或多个 SSD 驱动器,否则同时读取文件只会导致磁盘抖动并减慢您的应用程序。鉴于您的处理任务非常简单(快速读取),您不太可能从线程中获益,因为您受 IO 限制而不是 CPU 限制。
-
as fast as possible你能解释一下为什么吗?只读取文件有什么问题? -
@huseyintugrulbuyukisik 是的!剩下的就是超级快速的元音计数......
-
在 Java 中,一个逻辑字符不适合一个
char,所以你有一个“代码点”的想法,它是一个int。你看,问题是一些chars 是“特殊的”并且只用于修改他们的邻居。因此,为了找到代码点,您需要确定您查看的是surrogatechar还是普通代码点。这一切都很快变得相当混乱......Further reading.
标签: java multithreading file io filesplitting