Mar*_*mes 23

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

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

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

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

Rgds,马丁


Cra*_*lus 13

如果要执行繁重的操作而不"阻塞"流,则应使用多线程.
UI中的示例,您在后台线程中执行繁重的处理,但UI仍处于活动状态.

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


Nrj*_*Nrj 9

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

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

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

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

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


Joo*_*ing 7

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

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


jav*_*use 5

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

对于第二个问题,是的,如果程序正在执行独立的任务,则使程序进入多线程是有益的。


bol*_*lei 5

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

总结一下,原因如下:

  • 保持您的程序响应。
  • 更好地利用您的 CPU。CPU 可能被 IO 或其他东西阻塞。在等待时,为什么不让其他线程使用它
  • 可以将多个线程调度到多个 CPU 内核
  • 有些问题自然要通过多线程来解决。这样的解决方案可以简化您的代码。