C# 线程池是如何工作的?

C# 线程池是如何工作的?,c#,windows,multithreading,concurrency,task-parallel-library,C#,Windows,Multithreading,Concurrency,Task Parallel Library,TPL中的线程池究竟是如何工作的?一些博客说它的工作原理如下: 线程首先检查其本地队列 然后线程检查全局队列 最后线程检查周围的本地队列 然而,Joe Duffy的《Windows上的并发编程》一书说,它的工作原理如下: 线程首先检查其本地队列 然后线程检查周围的本地队列 最后线程检查全局队列 谁是对的?在这种情况下,博客似乎是正确的 它首先查看本地队列的头,然后查看全局队列 队列,然后在其他线程的本地队列中 来源:,请参阅“工作窃取”如果它首先检查周围的本地队列,以减少全局队列上的锁,

TPL中的线程池究竟是如何工作的?一些博客说它的工作原理如下:

  • 线程首先检查其本地队列
  • 然后线程检查全局队列
  • 最后线程检查周围的本地队列
然而,Joe Duffy的《Windows上的并发编程》一书说,它的工作原理如下:

  • 线程首先检查其本地队列
  • 然后线程检查周围的本地队列
  • 最后线程检查全局队列

谁是对的?

在这种情况下,博客似乎是正确的

它首先查看本地队列的头,然后查看全局队列 队列,然后在其他线程的本地队列中


来源:,请参阅“工作窃取”

如果它首先检查周围的本地队列,以减少全局队列上的锁,那就更有意义了…全局队列在.NET 4中得到了改进,使用了无锁算法,避免在包围本地队列之前进入全局队列所产生的任何潜在性能问题。Eric Eilebrecht的博客文章是一个良好的开端。谢谢!我要试一试;)