什么时候应该使用多线程?如果不同的线程执行相互独立的任务,多线程会有益吗?

时间:2011-09-14 16:19:45

标签: java multithreading

这是我在昨晚被拒绝的采访中无法回答的两个问题。

9 个答案:

答案 0 :(得分:21)

问:你什么时候应该使用多线程?

答:“你的问题非常广泛。很少有非平凡的系统只需一个线程即可简单,快速,可靠地满足功能。例如:[选择目标公司销售的典型系统,选择其功能的几个方面,这将是更好的线程 - 重CPU,通信,多用户 - 只选择可能和解释的东西。

问:如果不同的线程执行相互独立的任务,多线程会有益吗?

答:“取决于'执行任务'的意思。如果线程以并发方式处理相互独立的数据,多线程肯定会有益 - 它以超线性的方式减少锁的需求和死锁的概率增加使用锁的数量.OTOH,执行相同代码的线程没有问题,这是安全且非常常见的。“

RGDS, 马丁

答案 1 :(得分:12)

当您想要执行繁重的操作而不“阻塞”流程时,您应该使用多线程 UI中的示例,您在后台线程中执行繁重处理但UI仍处于活动状态。

如果线程执行互斥任务,那么它是最好的,因为在所需的线程之间没有同步的开销

答案 2 :(得分:7)

多线程是一种在程序中引入并行性的方法。在任何情况下,如果程序中可以存在并行路径(不依赖于其他部分的结果的部分),则可以使用它。

现在特别是所有这些多核心机器,这是一个应该利用的功能。

一些例子是处理大数据,你可以将它分成块并在多个线程中完成,文件处理,长时间运行的I / O就像网络数据传输等。

对于你的第二个问题,最好是任务是相互独立的 - 原因

  • 没有共享数据意味着没有竞争
  • 不需要任何有序处理(依赖),因此每个线程在有资源时都可以工作
  • 更容易实施

答案 3 :(得分:6)

当您从主事件循环调用耗时的任务时,绝对应该在GUI应用程序中使用多线程。同样适用于在执行I / O时可能会阻塞的服务器应用程序。

对于第二个问题,当您拥有多个CPU核心的机器时通常是。在这种情况下,这些独立的任务可以并行执行。

答案 4 :(得分:4)

如果可以分解可以并行执行的任务,则可以使用多线程。就像生产和消费一样,验证和保存,阅读和验证。

对于第二个问题,是的,如果程序执行独立任务,将程序编入多线程是有益的。

答案 5 :(得分:1)

通常,多线程用于执行时间受CPU 限制/瓶颈而不是其他区域(如IO)的情况。第二个问题对环境来说真的很主观。例如,如果它们相互独立但两者都做了很多IO,那么你可能不一定会获得大量收益。

答案 6 :(得分:1)

本文给出了很好的理由: https://marcja.wordpress.com/2007/04/06/four-reasons-to-use-multithreading/

总结一下,原因是:

  • 让您的计划保持响应。
  • 更好地利用您的CPU。 CPU可能被IO或其他东西阻止。等待时,为什么不让其他线程使用它
  • 可以将多个线程安排到多个CPU核心
  • 多线程自然要解决一些问题。这样的解决方案可以简化您的代码。

答案 7 :(得分:0)

  

什么时候应该使用多线程?

多线程是一个同时执行多个线程的过程。当你可以一起执行多个操作时,你应该使用多线程,这样可以节省时间。

  

如果不同的线程执行相互独立的任务,多线程会有益吗?

通常是的。如果不同的线程执行相互独立的任务,那么多线程通常是有益的,这样如果在单个线程中发生异常,它就不会影响其他线程。

答案 8 :(得分:0)

当我们将工作分成几个独立的部分时,就会使用多线程。例如,假设您必须执行复杂的数据库查询以获取数据,并且如果您可以将该查询划分为sereval独立查询,那么如果为每个查询分配一个线程并并行运行则会更好。 这样,您的最终结果输出将更快。 同样,这是一个例子,当你有能力运行多个数据库查询时。

要回答你的第二个问题,最好有独立任务的线程。否则,您将不得不处理同步,全局变量等。