我最近尝试弄清楚 ThreadPool 类的解决方案如何在 .NET 4.0 中工作。我尝试通读反射代码,但它对我来说似乎有点太广泛了。
有人可以用简单的术语解释一下这个类是如何工作的,即
- 它如何存储传入的每个方法
- 线程安全吗?假设有多个线程尝试将其方法放入线程池中?
- 当达到可用线程的限制时,当其中一个线程空闲时,它如何返回执行队列中等待的剩余批处理?有回调机制吗?
最佳答案
当然,在没有实际实现的情况下(或者在没有 Eric Lippert :) 的情况下,我所说的只是常识:
- 线程池拥有一个内部(循环?)队列,其中保存任务(因此
QueueUserWorkItem
)。 - 将任务放入队列是线程安全的(这是肯定的,因为我自己已经在这种情况下使用过多次)。
- 我认为每个线程都会无限循环,并在完成当前任务时自动从队列中获取任务(当然是以线程安全的方式)。如果队列为空,它就会阻塞。
关于multithreading - .NET 4.0中ThreadPool是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254221/