此问题基于Microsoft Virtual Academy中的Jeffrey Richter线程类。通过线程池处理器相关性和线程创建
按我的理解,如果我把我的处理器亲和力只使用1个处理器如下图所示
Int32 affinity = 1;
Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)affinity;
for (int i = 0; i < 200 ; i++)
{
ThreadPool.QueueUserWorkItem(ActiveWorker);
}
ActiveWorker()
是CPU绑定的功能,只是做了一些CPU密集型的计算是需要大约100毫秒。当我计算创建的线程数大约为5.但根据我的理解,因为CPU关联性设置为仅使用1个处理器,所以线程池不应创建超过1个线程。任何想法?在Jeffrey的演示中,它显示它只为整个200工作项目创建了1个线程,但是当我在PC中运行同一个样本时,可以看到创建了5个线程。 (我的电脑有2个内核)
降级到.NET 3.5线程池后开始考虑Process.ProcessorAffinity – RUSH