首页 > 解决方案 > 单核没有多线程优势

问题描述

我是并发编程和多线程的新手。我可以理解多核处理器的多线程的好处,但这些好处是否存在于单核处理器上,

例如,假设我们有一台多核计算机和一个程序来总结一个非常大的数字:

int sum = 0;
for (i=1, i<9999999999, i++)
{
   sum += i;
}

doOtherStuff();  // execute other function that is irrelevant to sum
...
...
//and then finally print the sum
Console.WriteLine(sum);

所以对于长时间运行的求和任务,我们可以创建第二个线程来计算和,主线程继续执行其他函数。

但是如果我们在单核计算机上运行这个程序,创建多线程并没有什么好处,不是吗?由于上下文切换,多线程会更糟吗?

标签: multithreadingconcurrencyoperating-system

解决方案


多线程有两个主要好处。

  1. 它允许非顺序计算同时发生,从而提高执行速度。

  2. 它还允许程序在等待阻塞操作时不会停止。

在您的示例中,执行速度没有增加,因为处理器仍必须在一个内核中执行每个命令。但是,如果您在循环期间等待用户输入(或执行另一个阻塞应用程序),那么如果 doOtherStuff() 在同一个线程中,您将无法完成它。通过将 doOtherStuff() 及其阻塞操作保留在单独的线程中,您将不会阻止求和操作的执行。

为了让多个应用程序使用单个核心处理器运行,操作系统使用循环执行。它从一个线程/应用程序移动到另一个线程/应用程序,一次执行几行。通过将阻塞情况分成不同的线程,您可以利用这一点。这通常通过 i/o 操作完成。

现在,“情况更糟吗?”

如果您受内存限制,则可能会出现问题,因为每个线程都有自己的堆栈。但是,由于操作系统已经在各种应用程序和操作之间切换上下文,因此通过添加循环对执行时间的不利影响可能很小。


推荐阅读