这个问题基于Jeffrey Richter在微软虚拟学院中的线程类。
据我理解,如果我像下面展示的那样将处理器亲和性设置为仅使用一个处理器:
据我理解,如果我像下面展示的那样将处理器亲和性设置为仅使用一个处理器:
Int32 affinity = 1;
Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)affinity;
for (int i = 0; i < 200 ; i++)
{
ThreadPool.QueueUserWorkItem(ActiveWorker);
}
ActiveWorker()
是一个CPU绑定的函数,仅进行一些大约需要100毫秒的CPU密集型计算。当我计算创建的线程数量时,大约有5个线程。但根据我的理解,由于CPU亲和力设置为仅使用1个处理器,线程池不应该创建超过1个线程。您有什么想法吗?在Jeffrey的演示中,它仅显示为整个200个工作项创建了1个线程,但是当我在我的PC上运行相同的样本时,我可以看到创建了5个线程。(我的PC有2个内核)