这是我在昨晚被拒绝的采访中无法回答的两个问题。
答案 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/
总结一下,原因是:
答案 7 :(得分:0)
什么时候应该使用多线程?
多线程是一个同时执行多个线程的过程。当你可以一起执行多个操作时,你应该使用多线程,这样可以节省时间。
如果不同的线程执行相互独立的任务,多线程会有益吗?
通常是的。如果不同的线程执行相互独立的任务,那么多线程通常是有益的,这样如果在单个线程中发生异常,它就不会影响其他线程。
答案 8 :(得分:0)
当我们将工作分成几个独立的部分时,就会使用多线程。例如,假设您必须执行复杂的数据库查询以获取数据,并且如果您可以将该查询划分为sereval独立查询,那么如果为每个查询分配一个线程并并行运行则会更好。 这样,您的最终结果输出将更快。 同样,这是一个例子,当你有能力运行多个数据库查询时。
要回答你的第二个问题,最好有独立任务的线程。否则,您将不得不处理同步,全局变量等。