有沒有一種方法可以確定給定線程在哪個CPU上運行? 最好在C#中,但C++會做。如何確定一個線程運行在哪個CPU上?
的.NET過程和ProcessThread類似乎並沒有提供這一信息。
ETA澄清:
我們正在開發用於處理HTTP多播數據流,併產生多個視頻編碼器,服務器應用程序。這運行在具有12個物理內核的系統上,產生24個邏輯CPU(超線程)。通過TaskManager和ProcessExplorer,我們驗證了我們衍生的進程在邏輯CPU上均勻分佈。但是,我們看到很多(內核?)活動只在一個CPU上進行,這些CPU會消耗不尋常的CPU時間。我們試圖確定在這個特定的CPU上運行哪個進程/線程。 TaskManager和ProcessExplorer似乎都不提供這些信息。如果他們這樣做,請解釋如何獲得這些信息。
否則,我們正在考慮編寫我們自己的工具來獲取這些信息。這就是我們需要幫助的。
我們知道如何更改線程關聯(並且我們知道,不能保證線程將與任何CPU保持關聯,但在此特定情況下,佔用CPU的線程仍與僅有一個CPU關聯),但爲了這樣做,我們需要首先確定哪個進程/線程需要重新定位。這是這個問題的唯一目標。
我希望這有助於澄清問題。
你想用這些信息解決什麼問題? –
它僅被稱爲內核。所以你需要以核心模式編程。在MSDN上查找Kernal API。 – Nawaz
如果某個線程在不同的時間在多個不同的CPU上運行,您希望它執行什麼操作? –