2010-03-24 79 views
12

線程關聯和進程關聯有什麼區別?線程關聯和進程關聯有什麼區別?

如果我有兩個線程,並且我有雙核心機器,那麼是否可以在兩個核心上並行運行這兩個線程?

如果我使用處理器關聯掩碼,那麼我可以控制核心上的進程的執行,但是當我必須在特定核心上運行線程時,我該如何讓這些線程核心特定?

將會理解一個非常簡單的例子。

回答

0

我不知道您可以在.net中設置線程關聯,因此環境決定在哪個內核上運行哪些線程。

+0

但如何在典型核心上運行線程? – DotNetBeginner 2010-03-24 12:03:10

+0

@布萊恩拉斯穆森 - 什麼?我站在我的話後面,.NET沒有辦法強制特定的線程在特定的處理器上執行。有關詳細信息,請參閱此主題:http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvb/thread/3279302a-6786-44a7-b69d-c302699b6fcb – Axarydax 2010-03-24 12:07:14

+0

對不起,我誤解了你。 – 2010-03-24 12:12:46

4

Thread Affinity和Process affinity有什麼區別?

進程關聯是屬於該進程的所有線程的默認關聯掩碼。如果未另外指定,則新線程將以進程關聯掩碼開始。但是,可以在不改變進程關聯性(以及其他線程的關聯掩碼)的情況下更改單個線程的關聯性,這就是進程和線程關聯之間存在差異的時間。

如果我有兩個線程,我有決鬥核心機,那麼是否有可能在兩個核心上並行運行這兩個線程?

是的,這是可能的,但在大多數情況下,你真的應該讓操作系統來決定......很可能它比你聰明。

如果我使用處理器親和度掩碼,那麼我可以控制核心上的進程的執行,但是當我必須在特定的核心上運行線程時,我怎樣才能使這些線程核心特定?

你將不得不使用的P/Invoke調用非託管函數SetThreadAffinityMask()然後用Thread.BeginThreadAffinity()確保託管線程保持與特定的OS線程。 但你真的不想那麼做!

+0

我已經嘗試使用SetThreadAffinityMask(),請看看我的問題@ http://stackoverflow.com/questions/2498501/using-setthreadaffinitymask-function-imported-from-kernel32-dl​​l-in-c-code – DotNetBeginner 2010-03-24 12:39:10

相關問題