2009-09-17 43 views
4

在C#中,当我创建一个新线程并在该线程上执行一个进程时,是否有办法将它分配给特定的内核?或者操作系统是否自动处理所有这些?我编写了一个多线程应用程序,我只想确保它针对双/四核功能进行了优化。利用双/四核技术

感谢

回答

7

你可以强迫你的线程在特定内核上运行,但一般而言,您应该让OS照顾它。操作系统自动处理其中的大部分内容。如果在四核系统上运行四个线程,则操作系统将在所有四个核心上安排它们,除非您采取措施来防止它发生。操作系统也会做一些事情,比如尝试让单个线程在同一个内核上运行,而不是为了获得更好的性能而转移它们,如果有空闲内核可用,则不要在同一个超线程内核上安排两个正在运行的线程,等等。

此外,而不是创建新的工作线程,你应该使用thread pool。系统将按照系统上可用处理器的数量进行扩展。

Windows Internals是一本介绍Windows调度程序如何工作的好书。

1

This post显示了如何为特定进程线程设置处理器关联。您可以使用此属性来限制线程对特定处理器或处理器组的亲和力。

0

多个线程通常会在多个核心或CPU上运行。默认情况下,它是将线程分配给CPU的Windows sheduler。

5

根据您的问题,您可能会对.NET 4任务并行库(TPL)扩展感兴趣。看看这article