我有一个 Pentium core i5 处理器,它有 4 个内核。如果我在 C# 控制台程序中执行此操作
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
Run Code Online (Sandbox Code Playgroud)
t1 和 t2 线程是否保证在不同的内核上运行?
Blu*_*eft 20
您不能在 .Net 中保证两个Threads 在两个单独的核心上运行。事实上,你也不能保证一个Thread只会在一个核心上运行(!)。
这是因为托管线程与操作系统线程不同——单个托管线程可能使用多个操作系统线程来支持它。在 C# 中,您只能直接处理托管Threads (至少,无需借助 p/invoke 来调用 WinAPI 线程函数,您永远不应该这样做)。
然而,.Net 和 Windows 线程调度程序非常擅长他们的工作——当第二个内核完全空闲时,它们不会在一个内核上运行两个线程。因此,一般情况下,您无需担心。