Multithreading 单核没有多线程优势

Multithreading 单核没有多线程优势,multithreading,concurrency,operating-system,Multithreading,Concurrency,Operating System,我不熟悉并发编程和多线程。 我可以理解使用多核处理器进行多线程处理的好处,但这些好处是否存在于单核处理器上 例如,假设我们有一台多核计算机和一个程序,将一个非常大的数字总结为: int sum = 0; for (i=1, i<9999999999, i++) { sum += i; } doOtherStuff(); // execute other function that is irrelevant to sum ... ... //and then finally pr

我不熟悉并发编程和多线程。 我可以理解使用多核处理器进行多线程处理的好处,但这些好处是否存在于单核处理器上

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

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);
int和=0;

对于(i=1,i,多线程有两个主要好处

  • 它允许同时进行非顺序计算, 提高执行速度

  • 它还允许程序在等待阻塞时不暂停 行动

  • 在您的示例中,执行速度没有提高,因为处理器仍必须在一个内核中执行每个命令。但是,如果您在循环期间等待用户输入(或执行另一个阻塞应用程序),则无法完成doOtherStuff(),如果它位于同一个线程中。保留doOtherStuff()并且它的阻塞操作在一个单独的线程中,您将不会阻止sum操作的执行

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

    现在,“情况更糟吗?”


    如果内存有限,可能会有一些问题,因为每个线程都有自己的堆栈。但是,由于操作系统已经在不同的应用程序和操作之间切换上下文,增加循环的执行时间的负面影响可能很小。

    有两个主要的好处多线程

  • 它允许同时进行非顺序计算, 提高执行速度

  • 它还允许程序在等待阻塞时不暂停 行动

  • 在您的示例中,执行速度没有提高,因为处理器仍必须在一个内核中执行每个命令。但是,如果您在循环期间等待用户输入(或执行另一个阻塞应用程序),则无法完成doOtherStuff(),如果它位于同一个线程中。保留doOtherStuff()并且它的阻塞操作在一个单独的线程中,您将不会阻止sum操作的执行

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

    现在,“情况更糟吗?”


    如果内存有限,可能会有问题,因为每个线程都有自己的堆栈。但是,由于操作系统已经在不同的应用程序和操作之间切换上下文,增加循环可能会减少执行时间。

    除了Jeremy answer,(全部正确),有:

    多线程设计通常允许相同的软件利用额外的内核(如果可用),而无需重建

    多线程可以允许构建独立于执行的子系统,这些子系统可以添加到其他应用程序中,所需的工作量或影响可以忽略不计


    许多设计自然适合多线程,显式、用户级状态机的替代方案既复杂又混乱。

    除了Jeremy answer(完全正确)之外,还有:

    多线程设计通常允许相同的软件利用额外的内核(如果可用),而无需重建

    多线程可以允许构建独立于执行的子系统,这些子系统可以添加到其他应用程序中,所需的工作量或影响可以忽略不计

    许多设计自然适合多线程,而显式用户级状态机的替代方案则复杂而混乱