.Net 4 Task的调度澄清?

标签 .net .net-4.0 task-parallel-library threadpool

来自here

The .NET Framework provides local task queues for each worker thread in the thread pool.Giving different parts of the application their own work queues helps avoid a central bottleneck ( by not accessing the global queue).

enter image description here

我假设这些队列用于来自工作线程而不是来自常规线程的新任务。

问题:

但是为什么队列(在每个工作线程中)以 LIFO 方式运行本地任务?公平在哪里? 较早排队的任务应该较早运行(先进先出)。

我错过了什么?

最佳答案

刚刚排队的任务可能仍将其工作内存集保留在 CPU 缓存中(例如,快速排序以递归方式将要排序的数组部分排队)。 LIFO 促进缓存重用并降低公平性。但无论如何,TPL 并不能保证公平,而且我发现很少有应用程序需要这样做。

关于.Net 4 Task的调度澄清?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18351891/

相关文章:

c# - 外部函数调用阻塞 UI 线程

c# - 是否有针对 CLR 版本的 C# 预编译器定义

.net - 使用引用类型成员定义结构是否有意义?

.NET、SqlConnection 对象和多线程

c# - 使用 StructureMap 的简单工厂

.net - 具有只读属性的 WCF DataContract

node.js - 有关异步编程实践的阅读 Material

c# - 如何等到任务在 C# 中完成?

c# - 我们是否应该同时提供 SmtpClient 包装器的异步和同步实现?

C# 这是 ReadOnlySpan<T> 的正确用法吗?