• 线程池基本理论


    主要特点:
           完成同一种任务的一组线程。(一般初始线程数>=64)
     
     
     原理:
           通过“事先创建一堆线程,并且执行完后不销毁”的方式,避免每次任务到来时,
         都要创建线程的开销。

     
     主要组成部分:
           线程池管理器(ThreadPoolManager): 创建线程池
                                                               添加新任务
                                                               销毁线程池
           工作线程(WorkThread): 线程池中的所有线程
           任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
           任务队列(TaskQueue):用于存放没有处理的任务。提供一种缓冲机制。

     基本操作:
           一般情况下是首先初始化一定数量的工作线程,并把任务提交给空闲的线程,当线
        程都处于忙的状态的时候,则重新生成新的工作线程,当空闲线程较多的时候则停止一
        部分线程,这些要看你自己的调度算法。但是线程不能滥用,因为并不是线程越多就会
        带来更好的性能,这些都要看你的具体应用,具体可以参照侯捷先生的《windows多线
        程程序设计》
     

     何时使用:
        当系统需要频繁启动线程,且完成任务的时间较短时,使用线程池能有效的提高性能。

        PS:之所以要强调任务的执行时间较短,是因为:如果任务执行时间很长(eg:数据库访
           问),那么“节省线程对象创建时间”对提升整体性能的作用是很有限的。


     优化线程池设计:
        a)动态改变工作线程数量
          设置好线程池的上限和下限。为应对突发访问量增加的情况,防止大量任务积压在任
        务队列中,动态“批量增加工作线程”;访问量下降后可适当减少工作线程数。

          eg:SqlServer单进程多线程模式,1024个数量的线程池,动态线程分配,理论上限32767。
        
        b)优化成合适的工作线程数量
           调试时,根据“统计规律”选择“预期访问频率”下,效率最高的初始工作线程数量。

        c)多个线程池
           根据不同任务或者任务优先级来采用不同线程池处理,一般用于复杂系统中。

  • 相关阅读:
    Python str转化成数字
    MySQL之CONCAT()的用法
    MySQL之LIMIT用法
    MySQL中LOCATE用法
    设计模式-模版方法
    设计模式-单例模式
    设计模式-桥接模式
    UML图标含义及记忆方法
    redis-分布式锁-消除竞争条件
    redis-分布式锁-刷新信号量
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2565966.html
Copyright © 2020-2023  润新知