单个处理器上可以 运行 并行的线程数
Number of threads that can run in parallel on a single processor
你好,我最近开始使用 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");
}
取决于你如何定义它,但在你的具体情况下,我认为是的,尽管它们在一个处理器上,但它们是 运行 并行的。
我这么说是因为 I/O 不受 CPU 约束。当您的线程等待系统调用完成时,其他线程将 运行 安静。
单核处理器一次只能运行一个线程,但是操作系统使用了一种机制在多个运行ning线程之间切换,从而表现出并发性。尽管线程实际上并不是 运行 并行,但您永远无法知道一个线程何时停止而另一个线程何时启动。
即使你只有一个内核和一个处理器,多线程的许多缺陷仍然存在。
正如 Blindy 所说,有多种情况会影响哪个线程在哪个时间 运行,但您不能真正依赖它们。
你好,我最近开始使用 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");
}
取决于你如何定义它,但在你的具体情况下,我认为是的,尽管它们在一个处理器上,但它们是 运行 并行的。
我这么说是因为 I/O 不受 CPU 约束。当您的线程等待系统调用完成时,其他线程将 运行 安静。
单核处理器一次只能运行一个线程,但是操作系统使用了一种机制在多个运行ning线程之间切换,从而表现出并发性。尽管线程实际上并不是 运行 并行,但您永远无法知道一个线程何时停止而另一个线程何时启动。
即使你只有一个内核和一个处理器,多线程的许多缺陷仍然存在。
正如 Blindy 所说,有多种情况会影响哪个线程在哪个时间 运行,但您不能真正依赖它们。