上图的改造改进后的线程模型最主要的特点是引入了一个调度线程和一个空闲线程池,这个调度线程会实时统计每个线程池的负载,来评估每个线程池是否需要增加或减少线程并做出调度动作,空闲线程池用来存放当前空闲的可用于调配的线程调配时,它就会发送调度指令到相应队列中,当线程池里的线程获取并执行了这个指令后,就实现了线程资源的调配
比如,它想给读 科威特手机号码列表 快线程池增加线程,就会给空闲线程池的队列发送一个调度指令,空闲线程池的线程取到这个指令后,就会将自己加入到读快队列的线程池里面,去处理读快队列的请求当调度线程想对读慢线程池调减线程时,它会向读慢队列发送一个调度指令,读慢队列的线程获取到这个指令后,就会离开读慢线程池加入到空闲线程池通过调度线程准实时的毫秒级负载统计、调度,我们实现了线程池资源的快速动态分配

对于每一个线程池的共享线程,也不再需要去轮询其他线程池的队列了,只需要专心处理自己队列的请求即可,大幅降低了线程池资源调度的消耗通过上述的线程队列模型优化,服务在高负载场景下可以提高%以上的吞吐量44线程模型改造上图左侧画的是我们服务请求的处理路径:一个请求的处理流程会经过网络线程、请求队列、工作线程、内存和硬盘引擎
|