2009-09-17 120 views
4

在C#中,當我創建一個新線程並在該線程上執行一個進程時,是否有辦法將它分配給特定的內核?或者操作系統是否自動處理所有這些?我編寫了一個多線程應用程序,我只想確保它針對雙/四核功能進行了優化。利用雙/四核技術

感謝

回答

7

你可以強迫你的線程在特定內核上運行,但一般而言,您應該讓OS照顧它。操作系統自動處理其中的大部分內容。如果在四核系統上運行四個線程,則操作系統將在所有四個核心上安排它們,除非您採取措施來防止它發生。操作系統也會做一些事情,比如嘗試讓單個線程在同一個內核上運行,而不是爲了獲得更好的性能而轉移它們,如果有空閒內核可用,則不要在同一個超線程內核上安排兩個正在運行的線程,等等。

此外,而不是創建新的工作線程,你應該使用thread pool。系統將按照系統上可用處理器的數量進行擴展。

Windows Internals是一本介紹Windows調度程序如何工作的好書。

1

This post顯示瞭如何爲特定進程線程設置處理器關聯。您可以使用此屬性來限制線程對特定處理器或處理器組的親和力。

0

多個線程通常會在多個核心或CPU上運行。默認情況下,它是將線程分配給CPU的Windows sheduler。

5

根據您的問題,您可能會對.NET 4任務並行庫(TPL)擴展感興趣。看看這article