前陣子跟同事討論到一段 while (true) 的程式,會用到多個 CPU 嗎?
.....
你覺得只會用到一個核心還是所有的核心都會用上呢?
我可以限定程式只跑在某個核心上面嗎?
以下一段 Console 程式,在 Windows 10 上跑,會用到所有的核心嗎?
static void Main(string[] args)
{
while (true)
{
int i = 0;
}
}
以下是我工作管理員的 CPU 圖示,
可以發現,它自已會去分散到各核心去(第1個處理器的2核心比較忙一些)!
疑 ... 跟我原本想像的不同呢 ...
那有辦法讓程式只跑在第1顆處理器的第一核中處理嗎?
在 .NET 可以設定ProcessThread 的 IdealProcessor 及 ProcessorAffinity 這2個屬性哦! 如下,
static void Main(string[] args)
{
foreach (ProcessThread thread in Process.GetCurrentProcess().Threads)
{
//設定1個處理器,第1顆核心上處理
thread.IdealProcessor = 0;
thread.ProcessorAffinity = (IntPtr)1;
}
while (true)
{
int i = 0;
}
}
所以執行起來 第1顆處理器的第一核 衝到 100% 哦!
除了程式設定外,也可以在工作管理員中選到那個 Process ,然後按右鍵,設定 Affinity (設定親和性) 哦!
參考資料
ProcessThread.ProcessorAffinity Property
Processor Affinity (處理器親和性 / 處理器相關性)
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^