.NET ThreadPool算法
.NET ThreadPool相关算法记录
1、ManagedThreadPool (corefx)
.net4.0之前只有全局队列,为了解决全局队列多线程竞争使用问题,引入work-stealing算法(golang scheduler也是这个算法)。
内部是通过ThreadLocal WorkStealingQueue实现。详细说明:(http://www.danielmoth.com/Blog/New-And-Improved-CLR-4-Thread-Pool-Engine.aspx)
2、CLRThreadPool (coreclr)
CLRThreadPool爬山算法( https://github.com/mattwarren/HillClimbingClrThreadPool )实现了使用最少线程到达最大吞吐量的目标
.NET线程池自动管理池中的工作线程数。它根据内置启发式新增和减少线程。
NET线程池有两种主要的注入线程机制:
饥饿避免机制(如果它看到没有在排队项目上取得进展,则添加工作线程)
爬山试探(试图在使用尽可能少的线程时最大化吞吐量)
爬山启发式的一个目标是在线程被I/O或其他停止处理器的等待条件阻塞时提高核心的利用率。
.NET线程池有机会在每次工作项完成时或以500毫秒的间隔注入线程,以较短者为准。
由线程计数中先前更改的反馈引导,线程池尝试添加线程(或将它们带走),
如果添加线程似乎有助于吞吐量,则线程池会增加更多;否则,它会减少工作线程的数量。这种技术被称为爬山启发式。
扩展阅读:
Go's work-stealing scheduler:https://rakyll.org/scheduler/
.NET ThreadPool算法的更多相关文章
- 实现简单ThreadPool
在很多的应用场景,需要根据任务去创建线程去异步处理问题,不过不停的创建线程和销毁线程本身是一个非常耗时和消耗系统资源的事情,所以通常这种情况使用线程池来实现,常用的场景比如web容器对于web请求的处 ...
- C# 线程知识--使用ThreadPool执行异步操作
C# 线程知识--使用ThreadPool执行异步操作 在应用程序中有许多复杂的任务,对于这些任务可能需要使用一个或多个工作线程或I/O线程来协作处理,比如:定时任务.数据库数据操作.web服务.文件 ...
- C#线程池ThreadPool的理解
在多线程编程中,线程的创建和销毁是非常消耗系统资源的,因此,C#引入了池的概念,类似的还有数据库连接池,这样,维护一个池,池内维护的一些线程,需要的时候从池中取出来,不需要的时候放回去,这样就避免了重 ...
- 野生程序员对.NETFramework 4.0 ThreadPool的理解
ThreadPool 类 提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 I/O.代表其他线程等待以及处理计时器. 命名空间: System.Threading程序集: mscor ...
- 【多线程】-ThreadPool线程池
ThreadPool介绍: Thread类是一个静态类,所有不存在实例化构造函数操作,直接可以调用其内所存在的方法. 微软官网给出的解释: 提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 ...
- 线程(Thread、ThreadPool)
多线程的操作,推荐使用线程池线程而非新建线程.因为就算只是单纯的新建一个线程,这个线程什么事情也不做,都大约需要1M的内存空间来存储执行上下文数据结构,并且线程的创建与回收也需要消耗资源,耗费时间.而 ...
- 线程(Thread,ThreadPool)、Task、Parallel
线程(Thread.ThreadPool) 线程的定义我想大家都有所了解,这里我就不再复述了.我这里主要介绍.NET Framework中的线程(Thread.ThreadPool). .NET Fr ...
- .NET Threadpool的一点认识
说到.NET Threadpool我想大家都知道,只是平时比较零散,顾现在整理一下: 一码阻塞,万码等待:ASP.NET Core 同步方法调用异步方法“死锁”的真相 .NET Threadpool ...
- 线程池(ThreadPool)
线程池概述 由系统维护的容纳线程的容器,由CLR控制的所有AppDomain共享.线程池可用于执行任务.发送工作项.处理异步 I/O.代表其他线程等待以及处理计时器. 线程池与线程 性能:每开启一个新 ...
随机推荐
- CPU芯片哪家强?电视处理器这么选就对了!
任何智能设备,CPU(Central Processing Unit/中央处理器)都是决定其性能优劣的核心组件,在家电界,最为人们熟知的CPU厂商就是Mstar以及Amlogic这两个品牌了,那两个品 ...
- HDU 6346 整数规划 (最佳完美匹配)
整数规划 Time Limit: 5500/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Subm ...
- Python的list循环遍历中,删除数据的正确方法
在遍历list,删除符合条件的数据时,总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_lis ...
- 如何从本地远程访问虚拟机内的Mysql服务器?
假设重装了操作系统,则本地的很多软件可能都需要重新安装,比如数据库.但是,假设我们把一些重要的软件安装在虚拟机当中,则在重装操作系统之前,数据库服务器可以和虚拟机一起进行备份.重装操作系统之后,原先的 ...
- mac下crontab定时任务使用
这篇文章的作用 BREAK TIME 本地pc配置定时任务,开机后每隔一小时执行一次,open这个页面,休息半分钟 cron创建备忘 首先创建定时任务 crontab -e 0 */ * * * op ...
- python循环解压rar文件
python循环解压rar文件 C:. │ main.py │ ├─1_STL_算法简介 │ STL_算法简介.rar │ └─2_STL_算法_填充新值 STL_算法_填充新值.rar 事情是这样的 ...
- java面试一、1.2集合
免责声明: 本文内容多来自网络文章,转载为个人收藏,分享知识,如有侵权,请联系博主进行删除. 1.2常见集合 List.Set.Map的区别以及选用 List和Set都继承与Collectio ...
- web项目中对post请求乱码处理
<filter> <filter-name>characterEncoding</filter-name> <filter-class>org.spri ...
- $(document).on('click','.classname',function(){}); VS $('.classname').on('click',function(){});
jquery中用on来绑定事件,经常的写法有$(document).on('click','.classname',function(){});$('.classname').on('click',f ...
- 关于整数溢出和NaN的问题
当Integer i = Integer.MAX_VALUE;i + 1 < i成立, Double.NaN与任何数(包括自己)比较都为false,与js的NaN一样 如下: //整数溢出 In ...