.NET ThreadPool相关算法

.NET ThreadPool相关算法记录

1、ManagedThreadPool

.net4.0之前只有全局队列,为了解决全局队列多线程竞争使用问题,引入work-stealing算法(golang java中都有使用),即ThreadLocal WorkStealingQueue。

2、CLRThreadPool

CLRThreadPool爬山算法实现了使用最少线程到达最大吞吐量的目标 (https://github.com/mattwarren/HillClimbingClrThreadPool

.NET线程池自动管理池中的工作线程数。它根据内置启发式新增和减少线程。

NET线程池有两种主要的注入线程机制:饥饿避免机制,如果它看到没有在排队项目上取得进展,则添加工作线程;以及爬山试探,试图在使用尽可能少的线程时最大化吞吐量。

爬山启发式的一个目标是在线程被I / O或其他停止处理器的等待条件阻塞时提高核心的利用率。

.NET线程池有机会在每次工作项完成时或以500毫秒的间隔注入线程,以较短者为准。

线程池利用这个机会尝试添加线程(或将它们带走),由线程计数中先前更改的反馈引导。

如果添加线程似乎有助于吞吐量,则线程池会增加更多;否则,它会减少工作线程的数量。这种技术被称为爬山启发式。

猜你喜欢

转载自www.cnblogs.com/caozhiyuan/p/10655409.html