【发布时间】:2016-12-13 23:56:13
【问题描述】:
此问题基于 Jeffrey Richter 在 Microsoft Virtual Academy 中的线程课程。
根据我的理解,如果我将处理器关联设置为仅使用 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 之后,ThreadPool 开始考虑 Process.ProcessorAffinity 的值
标签: c# multithreading task