任务线程上下文切换

时间:2011-12-04 21:57:32

标签: .net multithreading task context-switch

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

然而,阅读我也注意到,无论如何,任务只是使用了线程。

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

2 个答案:

答案 0 :(得分:10)

你所读到的内容是错误的。

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

一些事实:

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

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

一些要检查的链接:

答案 1 :(得分:1)

上下文切换不是线程中固有的,它们是线程滥用所固有的。任务以这样一种方式使用线程,即任何正在运行的线程都可以执行任何需要完成的任务,从而避免在线程被滥用时发生的昂贵的上下文切换。