Java中的MultiThreading是否需要很长时间才能完成任务?

Gee*_*eta 2 java multithreading

我必须在10个大尺寸文件(zip格式为70 MB)中搜索一个字符串,并且必须将带有搜索字符串的行打印到相应的10个输出文件.(即文件1输出应该在output_file1 ... file2-- - > output_file2).对于单个文件,相同的程序需要15分钟.但如果使用10个线程来读取10个文件并写入10个不同的文件,它应该在15分钟内完成,但需要40分钟.

我该怎么解决这个问题.或多线程只需要这么多时间?

mdm*_*dma 5

并发访问文件通常在2-3个线程之后变慢,因为硬盘最终会同时尝试从所有文件中读取,类似于读取碎片整理的文件.

为避免这种情况,请将工作拆分为文件读取器和文件解析器.文件读取器从文件中引入数据(也解压缩),文件解析器解析数据.您可以使用PipedInputStream/ PipedOutputStream将数据从文件读取器转发到文件解析器.

因为你的文件是压缩的,所以读取涉及I/O和cpu​​,它们可以在2-4个读取所有文件的线程中很好地交错.对于解析文件,最简单的方法就是只从PipedInputStream中读取一个线程,这样每个文件就有一个解析器线程.每个文件使用多个线程需要拆分流并处理块边界处的搜索,这会使进程复杂化,而这里不需要,因为您可能具有足够的并行性,包含10个解析器线程和2-4个读取器线程.