• .Net 线程池小结


    .Net的各种异步任务都依赖线程池,深入理解线程池更有助于我们对系统的并发控制。

    参数:

    1. 当前工作线程数可以通过ThreadPool.ThreadCount属性查询。
    2. 线程池关键的是最小线程数,可以通过ThreadPool.GetMinThreads()函数获取,里面有两个指标参数,工作线程数和io线程数。
    3. 默认最小线程数是逻辑CPU个数,可以通过ThreadPool.SetMinThreads()函数修改这个值。

    管理策略:

    最小线程数不是一开始就投放到线程池,也是逐步创建的,以工作线程为例:

    1. 当工作线程数未达到最小线程限制时,新任务后会立即创建线程。
    2. 当工作线程数达到最小线程限制时,新任务依然会创建线程,但不是立即,而是每秒钟不超过2个(应该是为了防止任务洪峰造成的创建线程的开销,尽量使用线程池现有线程),没来得及执行的任务会排队。
    3. 当所有任务都完成,线程池中的线程会逐步释放掉。

    实践:

    如果系统本身有一大堆依赖着线程池的后台任务时,默认的最小线程池就不大够了。默认的最小线程阈值是cpu个数,是很容易被消耗光的。此时再来耗时的新任务时,由于超过最小线程数的阈值,新的请求的创建线程数不超过每秒2个,很容易导致得不到线程池的调度而排队。 此时可能需要合理修改最小线程池大小。

    相关文章:

  • 相关阅读:
    IfcAxis2Placement3D
    IfcAxis2Placement2D
    IfcAxis1Placement
    realsense 深度数据
    realsense 深度数据
    realsense 深度数据
    sudo fdisk -l
    temviewer历史版本
    100/9801
    IfcPlacement
  • 原文地址:https://www.cnblogs.com/TianFang/p/15600825.html
Copyright © 2020-2023  润新知