在C#中,当我创建一个新线程并在该线程上执行进程时,有没有办法将它分配给特定的核心?或者操作系统是否自动处理所有这些?我写了一个多线程应用程序,我只是想确保它针对双/四核功能进行了优化。
由于
答案 0 :(得分:7)
您可以强制您的线程在特定内核上运行,但通常您应该让操作系统处理它。操作系统自动处理大部分内容。如果在四核系统上运行四个线程,操作系统将在所有四个核心上安排它们,除非您采取措施防止它发生。操作系统还会尝试保持单个线程在同一个内核上运行,而不是为了获得更好的性能而转移它们,如果有可用的空闲内核,则不要在同一个超线程内核上安排两个正在运行的线程,等等。
此外,您应该使用thread pool而不是为工作创建新线程。系统会将其缩放到系统上可用的处理器数量。
Windows Internals是一本关于Windows调度程序如何工作的好书。
答案 1 :(得分:5)
根据您的问题,您可能会对.NET 4任务并行库(TPL)扩展感兴趣。看一下这个article。
答案 2 :(得分:1)
This post显示了如何为特定进程线程设置处理器关联。您可以使用此属性来限制线程与特定处理器或处理器集的亲和性。
答案 3 :(得分:0)
多个线程通常会在多个内核或CPU上运行。默认情况下,它是Windows sheduler,它将线程分配给CPU。