0

在java中,在java中添加多个线程来完成一项任务是否有助于更快地执行该任务?

目前我的程序中使用了主线程,但速度很慢。我目前的测量结果是每秒 500 个进程,但进程总数超过了 10 亿。如何让我的程序运行得更快?

4

1 回答 1

3

在java中,在java中添加多个线程来完成一项任务是否有助于更快地执行该任务?

这完全取决于你在做什么。如果您在独立的数据片段上执行任务,在检索或存储结果方面没有瓶颈,并且假设您在一台具有多个处理器的机器上,那么是的,使用更多线程可能会有所帮助。

但是,有多种方法是无济于事的:

  • 如果您正在从慢速资源读取输入数据,您可能会尽可能快地处理它
  • 如果您正在将结果写入慢速资源,您可能会尽可能快地处理它,因为无论如何您都可以写入结果
  • 如果一项任务依赖于另一项任务的结果,您可能无法获得任何并行化
  • 如果您只有一个 CPU 内核,并且任务已经受 CPU 限制,那么添加更多线程将无济于事

在其中一些情况下,线程可以提供帮助,但不如它只是受 CPU 限制并且您有大量备用内核那么重要。你需要弄清楚你当前的瓶颈在哪里。

请注意,在最好的情况下,您只会获得与您拥有的核心数量成比例的加速。因此,如果你有 16 个核心(不太可能但可行)和完美的并行化,那么如果一个核心每秒可以处理 500 个项目并且你有 10 亿个项目,那么处理所有内容仍然需要将近 35 个小时。

几乎可以肯定的一件事是,您的多线程代码将比单线程代码更复杂。尝试使用高级抽象(例如 injava.util.concurrent而不是低级抽象(例如java.lang.Thread)以使事情变得更简单。

于 2012-11-16T07:06:26.180 回答