zoukankan      html  css  js  c++  java
  • .Net的两个线程池

    .NET在一个进程中准备了两个线程池,除了上篇文章中所提到的CLR线程池之外,它还为异步IO操作的回调准备了一个IO线程池。IO线程池的特性与CLR线程池类似,也会动态地创建和销毁线程,并且也拥有最大值和最小值。
     
    在使用异步IO方式读取了一段文本之后,下一步操作往往是对其进行分析,这就进入了计算密集型操作了。但对于计算密集型操作来说,如果使用整个IO线程池来执行,我们无法有效的控制某项任务的运算能力。因此在有些时候,我们在回调函数内部会把计算任务再次交还给独立的线程池。这么做从理论上看会增大线程调度的开销,不过实际情况还得看具体的评测数据。如果它真的成为影响性能的关键因素之一,我们就可能需要使用Native Code来调用IOCP相关API,将回调任务直接交给独立的线程池去执行了。
     
    • 原来最小线程数量为5时,只有4个线程可以立即执行。经过进一步尝试,最小线程数量为10时,也只有9个线程可以立即执行。
    • 原来线程池创建线程的速度并非永远是“每秒2个”,而一些资料上写着“每秒不超过2个”的确是确切的说法。
    • 在线程池最小线程数量的范围之内,尽可能多的任务立即执行。
    • 线程池使用使用每秒不超过2个的频率创建线程(1秒一个或0.5秒一个)。
    • 当达到线程池最大线程数时(第6秒),停止创建新线程。
    • 在旧任务执行完毕后,新任务立即执行。
    时刻记住:“不要阻塞线程池里的线程”。
     
    首先,我们要明确一个观念:线程并不“属于”任何一个任务,或者说任务并不“拥有”线程。我们只是借用一个线程来做事,用完以后便会还回。也就是说,任务在执行时修改线程的信息(名称,优先级,语言文化等等)是没有意义的,此外,任务也不应该依赖线程的这些状态。
     
    最后,便是时刻记得系统中哪些功能依赖线程池。
  • 相关阅读:
    Sql Server系列:分区表操作
    [bug]WCF 内存入口检查失败 Memory gates checking failed
    由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面。
    如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?
    IIS 之 在IIS7、IIS7.5中应用程序池最优配置方案
    使用nginx搭建高可用,高并发的wcf集群
    NPOI读写Excel
    用 IIS 实现请求转发
    模型验证组件 FluentValidation
    C#中的 正则表达式
  • 原文地址:https://www.cnblogs.com/AlexHHC/p/3033778.html
Copyright © 2011-2022 走看看