線程關聯和進程關聯有什麼區別?線程關聯和進程關聯有什麼區別?
如果我有兩個線程,並且我有雙核心機器,那麼是否可以在兩個核心上並行運行這兩個線程?
如果我使用處理器關聯掩碼,那麼我可以控制核心上的進程的執行,但是當我必須在特定核心上運行線程時,我該如何讓這些線程核心特定?
將會理解一個非常簡單的例子。
線程關聯和進程關聯有什麼區別?線程關聯和進程關聯有什麼區別?
如果我有兩個線程,並且我有雙核心機器,那麼是否可以在兩個核心上並行運行這兩個線程?
如果我使用處理器關聯掩碼,那麼我可以控制核心上的進程的執行,但是當我必須在特定核心上運行線程時,我該如何讓這些線程核心特定?
將會理解一個非常簡單的例子。
我不知道您可以在.net中設置線程關聯,因此環境決定在哪個內核上運行哪些線程。
Thread Affinity和Process affinity有什麼區別?
進程關聯是屬於該進程的所有線程的默認關聯掩碼。如果未另外指定,則新線程將以進程關聯掩碼開始。但是,可以在不改變進程關聯性(以及其他線程的關聯掩碼)的情況下更改單個線程的關聯性,這就是進程和線程關聯之間存在差異的時間。
如果我有兩個線程,我有決鬥核心機,那麼是否有可能在兩個核心上並行運行這兩個線程?
是的,這是可能的,但在大多數情況下,你真的應該讓操作系統來決定......很可能它比你聰明。
如果我使用處理器親和度掩碼,那麼我可以控制核心上的進程的執行,但是當我必須在特定的核心上運行線程時,我怎樣才能使這些線程核心特定?
你將不得不使用的P/Invoke調用非託管函數SetThreadAffinityMask()
然後用Thread.BeginThreadAffinity()
確保託管線程保持與特定的OS線程。 但你真的不想那麼做!
我已經嘗試使用SetThreadAffinityMask(),請看看我的問題@ http://stackoverflow.com/questions/2498501/using-setthreadaffinitymask-function-imported-from-kernel32-dll-in-c-code – DotNetBeginner 2010-03-24 12:39:10
但如何在典型核心上運行線程? – DotNetBeginner 2010-03-24 12:03:10
@布萊恩拉斯穆森 - 什麼?我站在我的話後面,.NET沒有辦法強制特定的線程在特定的處理器上執行。有關詳細信息,請參閱此主題:http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/3279302a-6786-44a7-b69d-c302699b6fcb – Axarydax 2010-03-24 12:07:14
對不起,我誤解了你。 – 2010-03-24 12:12:46