您好我最近开始使用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");
}
答案 0 :(得分:5)
单核处理器一次只能运行一个线程,但操作系统使用一种机制在多个正在运行的线程之间切换,以提供并发的外观。虽然线程实际上并不是并行运行,但您永远不会知道一个线程何时停止而另一个线程何时开始。
即使您只有一个核心和一个处理器,多线程的许多缺陷仍然存在。
就像Blindy所说,有各种情况会影响哪个线程在哪个时间运行,但你不能真正依赖它们。
答案 1 :(得分:1)
取决于你如何定义它,但在你的具体情况下,我会争辩说是的,尽管是在一个处理器上,它们并行运行。
我说是因为I / O不受CPU限制。当你的线程处于等待系统调用完成时,其他线程将平稳运行。