【发布时间】:2023-03-06 02:18:01
【问题描述】:
我一直在尝试编写一些 java 应用程序。 这个应用程序想要运行的是处理一个文本文件。
但是,输入文本文件很大,(超过 200mb) 我尝试将 200mb 拆分为四个拆分文件(每个 50mb)
然后,使用四个线程,尝试同时处理每个拆分。
所以,我创建了一个实现可运行的类,它有一个文本处理模块。 然后,我创建了 4 个 obj(名为 worker1 ~ worker4)runnnable 类,然后调用:
worker1.run();
worker2.run();
worker3.run();
worker4.run();
但是,这些线程不是同时运行的,而是线性运行的。 这意味着,worker 1 线程完成后,worker2 线程正在运行。
因此,它们每个只需要 0.5 秒,但在这种线性运行中,每个需要 2 秒。 (worker1 0.5s + worker2 0.5s + worker3 0.5s + worker4 0.5s) 如果我可以同时运行 4 个线程,我预计这个应用程序只需要大约 0.5 秒或不到 1 秒,这比 2 秒快。
我该怎么做?
【问题讨论】:
-
请记住,在这种情况下,很可能在多个线程中处理文件的性能会更差,而不是更好。
-
200MB 不是一个大文件。您可以在一两秒钟内阅读它。是什么让您认为多线程会更快?你有多线程磁盘吗?
-
200 mb 实际上并不大。但是,就我而言,处理需要将近 20 秒。但是,我拆分了 4 个工人,然后处理它。这需要 4.33 秒来处理。多个但处理不同部分的输入非常快!
标签: java multithreading concurrency