任务线程上下文切换

The*_*ies 5 .net multithreading task context-switch

我正在阅读并阅读如果我在.Net中使用Tasks而不是Threads,他们就不会受到Threads有问题的Context Switch的影响.

然而,阅读我也注意到,无论如何,任务只是在封面下使用线程.

所以我有点困惑,任何澄清都表示赞赏.

ebb*_*ebb 10

你读过的是错的.

Task是TPL的一部分.TPL使用比CLR的线程池更高级的调度程序.一个例子是TPL调度程序使用WorkStealingQueues.

一些事实:

  • 无论你这样做Task.Factory.StartNew,还是ThreadPool.QueueUserWorkItem两者都将使用相同的线程池(.NET 4.0)
  • 无论您使用的是Task"原始"线程,每个时间片都会导致上下文切换.
  • 此外,如果优先级较高的线程变为可运行,则会导致上下文切换.
  • A Task将导致与常规线程一样多的上下文切换.

请注意,只有在没有足够的处理器同时处理线程时才会发生上下文切换.

一些链接要检查: