multithreading - .NET 4.0中ThreadPool是如何实现的?

标签 multithreading .net-4.0 threadpool

我最近尝试弄清楚 ThreadPool 类的解决方案如何在 .NET 4.0 中工作。我尝试通读反射代码,但它对我来说似乎有点太广泛了。

有人可以用简单的术语解释一下这个类是如何工作的,即

  1. 它如何存储传入的每个方法
  2. 线程安全吗?假设有多个线程尝试将其方法放入线程池中?
  3. 当达到可用线程的限制时,当其中一个线程空闲时,它如何返回执行队列中等待的剩余批处理?有回调机制吗?

最佳答案

当然,在没有实际实现的情况下(或者在没有 Eric Lippert :) 的情况下,我所说的只是常识:

  1. 线程池拥有一个内部(循环?)队列,其中保存任务(因此QueueUserWorkItem)。
  2. 将任务放入队列是线程安全的(这是肯定的,因为我自己已经在这种情况下使用过多次)。
  3. 我认为每个线程都会无限循环,并在完成当前任务时自动从队列中获取任务(当然是以线程安全的方式)。如果队列为空,它就会阻塞。

关于multithreading - .NET 4.0中ThreadPool是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254221/

相关文章:

c - 在线程中执行 malloc

.net - .Net4 的 WPF 全局样式问题

java - 如何处理由于 WebSphere 中的多个 AJAX 请求而导致的高线程使用率

c++ - 在 XP 中也加载的 DLL 中使用新的 Vista 线程池 API(XP 中未使用线程池代码)

multithreading - 调试 Delphi 多线程应用程序 - 如何获得消耗 100% CPU 的应用程序

java - 使用java中的两个线程多次打印 "Hello"和 "world"

linux - 在具有多个(物理)CPU 的系统上的多线程进程中,如何处理线程调度?

c# - 实现 IValidatableObject 时 ValidationContext 的目的是什么

c# - 如何强制我的 C# Windows 窗体使用阿拉伯数字?

java - 多线程并行处理