我有一个 Pentium core i5 处理器,它有 4 个核心。如果我在 C# 控制台程序中执行此操作
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
t1 和 t2 线程是否保证在不同的内核上运行?
答案1
在 .Net 中,你无法保证两个Thread
程序在两个不同的核心上运行。事实上,您也不能保证一个Thread
只在一个核心上运行(!)。
这是因为托管线程与 OS 线程不同- 单个托管线程可能使用多个 OS 线程来支持它。在 C# 中,您只能直接处理托管Thread
线程(至少,不需要借助 p/invoke 来调用 WinAPI 线程函数,这是你永远不应该做的)。
但是,.Net 和 Windows 线程调度程序非常擅长处理它们的工作 - 它们不会在单个核心上运行两个线程,而第二个核心完全处于空闲状态。所以,一般来说,你不必担心这一点。