設定程式 Run 在某一個處理器的某一個核心上?

前陣子跟同事討論到一段 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:從零開始的軟體開發生活

請大家繼續支持 ^_^