假设我的SSD上有一个很大的文件,有48个内核。 我想过滤文本文件(基于行的文本文件),仅保留某些句子。然后我想将过滤后的内容写到一个新文件中,同时保持原始顺序。
我认为Java并行流不会保持顺序。
我的想法是这样的:创建48个均匀分割文件的点,然后调整指针以开始新行,然后创建48个线程,每个线程处理不同的块并过滤行(并保存结果)在内存中-结果比原始文件要小得多),然后取48件并将它们依次写到一个文件中。
这是正确的方法吗,是否有Java框架,还是应该从头开始编写?
答案 0 :(得分:0)
在这种特殊情况下,在多线程环境中工作不会提高性能。
您正在执行繁重的IO操作(读取和写入磁盘),而这些操作是不同线程无法完成的。
在加载内容之后并将其写入磁盘之前,您当然可以并行化搜索,但是对于普通的文本搜索,速度并不能真正提高。
在尝试应用复杂的多线程算法之前,请考虑以下问题:
如果是,并且演算并不繁重,那么花很多时间尝试加快演算阶段不是一个好主意,因为IO操作发生的时间比内存操作要慢一百或几千个时间。
通过尝试将执行时间划分为以下几个部分:
如果第二阶段确实比其他阶段更快,那么并行化不是一个好的解决方案,但是您必须尝试其他解决方案。