我有一個 Pentium core i5 處理器,有 4 個核心。如果我在 C# 控制台程式中執行此操作
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
t1 和 t2 執行緒是否保證在單獨的核心上運行?
答案1
您無法保證在 .Net 中兩個Thread
s 運行在兩個單獨的核心上。實際上,您也不能保證它Thread
只能在一個核心上運作(!)。
這是因為託管線程與作業系統線程不同- 單一託管執行緒可以使用多個作業系統執行緒來支援它。在 C# 中,您只能直接與託管物件Thread
打交道(至少,不訴諸 p/invoke 來呼叫 WinAPI 執行緒函數,這是你永遠不應該做的)。
然而,.Net 和 Windows 執行緒調度程式非常擅長它們的工作 - 當第二個核心完全空閒時,它們不會在單一核心上運行兩個執行緒。所以,一般來說,你不需要擔心這個問題。