可以在单个处理器上并行运行的线程数

时间:2015-03-17 01:13:20

标签: c# c#-4.0

您好我最近开始使用c#中的线程并且有一个问题,我无法得到明确的答案。多个线程可以在单个核心处理器上并行运行,或者一次只能运行一个线程?我在单核处理器上运行以下程序,我总是看到以下输出: 主叫 你好 主要完成

让我想知道如果我在多核处理器上运行它,我可能会看到输出为:

主叫 主要完成 你好

static void Main(string[] args)
{
    Console.WriteLine("Main called");   
    Thread thread = new Thread(SayHello);
    thread.Start();    
    Console.WriteLine("Main done");
    Console.ReadLine();
}

public static void SayHello()
{
    Console.WriteLine("Hello");
}

2 个答案:

答案 0 :(得分:5)

单核处理器一次只能运行一个线程,但操作系统使用一种机制在多个正在运行的线程之间切换,以提供并发的外观。虽然线程实际上并不是并行运行,但您永远不会知道一个线程何时停止而另一个线程何时开始。

即使您只有一个核心和一个处理器,多线程的许多缺陷仍然存在。

就像Blindy所说,有各种情况会影响哪个线程在哪个时间运行,但你不能真正依赖它们。

答案 1 :(得分:1)

取决于你如何定义它,但在你的具体情况下,我会争辩说是的,尽管是在一个处理器上,它们并行运行。

我说是因为I / O不受CPU限制。当你的线程处于等待系统调用完成时,其他线程将平稳运行。