• CRL线程池调度和配置的一些细节


    首先声明的是,CRL线程池指的是 System.Threading.ThreadPool。
    1,CLR中的一个线程池运行于一个进程,被进程中所有appdomain通用。
    2,线程池中的线程在被用完回归到池中时,TLS槽的数据会被保留,其他数据如表示状态,身份模拟,优先级
    等会被清除。
    3,当工作项进入线程池时,新线程被创立,直到达到最优线程数。最优线程数等于CPU数量。达到这个数量后 ,

    线程池采用启发式规则管理线程:

    a,达到最优数量后,新线程创建速率被控制在500毫秒一个。
    b,后台有一个守护进程管理线程池,观察是否存在线程饥饿或是空闲,按照复杂的算法决定是否创建或者移
    除线程。其中考虑cpu的利用情况。在最大值和最小值范围内,若是利用率低,则创建线程,若是利用率高,
    则考虑移除线程。
    c,最大值和最小值可以做调整。最小值都默认为0,。 .net 2.0时,每个cpu默认最大值为25,2.0 sp1之后,
    每个cpu扩展到250个。asp.net 的默认值被改了,最小值50,最大值100,可以通过配置 machine.config中
    processModel节点属性值。通常asp.net 是不使用线程池中的线程来处理web请求的,但是一些组件,I/O操作
    ,异步操作可能会使用线程池,所以你自己的业务逻辑能使用多少线程是不可预知的,一个建议是不使用CRL
    自带的线程池而去自己实现一个或者第三方的。还有一个好消息是你可以通过配置system.web>httpRuntime
    节点的minFreeThreed属性,来保证线程池给予最小线程数不用于asp.net处理请求,而归你自己调用。

    4,线程池尚未提供的功能:

    a,线程没有优先级可言。
    b,appdomain和组件间共享线程池,没有提供隔离。

  • 相关阅读:
    mysqldump --skip-tz-utc
    mysql 时间格式转换 DATE_FORMAT
    redis setinel 启动就 sdown
    virtualbox 1059m 布置1G虚拟机
    virtualbox 扩展磁盘空间
    tar gzip 压缩效率比较
    堆表 索引组织表
    内核参数 kernel.shmmax
    utf8mb4 字符集能正常存储表情
    源码包中带 boost 和 不带 boost
  • 原文地址:https://www.cnblogs.com/wusong/p/2607860.html
Copyright © 2020-2023  润新知