gpt4 book ai didi

.net - 任务线程上下文切换

转载 作者:行者123 更新时间:2023-12-04 17:12:05 26 4
gpt4 key购买 nike

我正在阅读并阅读到,如果我在 .Net 中使用任务而不是线程,它们将不会受到线程有问题的上下文切换的影响。

然而,阅读我也注意到任务只是在幕后使用线程。

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

最佳答案

你读到的都是错误的。
Task是 TPL 的一部分。 TPL 使用比 CLR 的线程池更高级的调度程序。一个例子是 TPL 调度程序使用 WorkStealingQueues .

一些事实:

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

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

    一些检查链接:
  • TPL和Threadpool的区别,以及.NET 4.0中线程池的变化:
    http://www.danielmoth.com/Blog/New-And-Improved-CLR-4-Thread-Pool-Engine.aspx
  • 演示如何在 C# 中实现 WorkStealingQueue:
    http://www.bluebytesoftware.com/blog/2008/08/12/BuildingACustomThreadPoolSeriesPart2AWorkStealingQueue.aspx
  • daniel moth 博客文章的简短版本:
    http://blogs.msdn.com/b/jennifer/archive/2009/06/26/work-stealing-in-net-4-0.aspx
  • 关于.net - 任务线程上下文切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8378907/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com