线程池与非线程池应用场景及模型对比分析

在网络编程中常常用到线程池和链接池,今天就对其中经常使用的线程池的基本应用场景和模型作个简单的对比分析。前端

一、  业务流程对比 web

a、  非线程池业务流模型: 编程

 


上图标识了基本的非线程池的线程模型,前端1有多少链接则前端客户端2与前端服务器端3均需创建一对一的线程数进行响应的链接。前端服务器端3与后端服务器端4也需创建响应数目的线程进行链接处理相关业务。后端

当一个任务处理完毕后线程退出,在下一个任务到来的时候前端服务器端建立新的线程来处理新的任务。服务器

 

b、线程池模型:网络


上图标识了基本的线程池模型。前端客户端大量的链接经过服务端的任务接收线程将链接任务放入前端服务器端的任务队列中,前端服务器端起固定数量的处理线程处理前端的任务,当处理线程处理完任务后从任务队列中获取下一个处理任务。保证了前端服务器端和后端服务器端的链接数不会超过前端服务器端的处理任务线程数n,从而保证了后端服务器端的压力。并发

当处理线程处理完一个任务而任务队列中没有任务的时候线程并不退出,阻塞等待新的任务。高并发

经过上图能够看出,当前端服务器端经过设置合理的处理线程数和任务队列大小,能够有效的屏蔽前端客户端高并发量对后端服务器端的冲击。优化

 

 

二、  应用场景分析对比spa

a、  非线程池模型

适用于单次链接任务执行时间较长,并发量不高的状况。一旦并发量很高则线程频繁建立的开销是巨大的。

b、  线程池模型

适用于单次任务执行时间较短,但并发访问量高的状况。当处理线程数设置极大的时候和非线程池模型几乎没有差异

 

三、  优化细节

a、在线程池模型中,能够预建立部分处理线程,随后根据实际的业务需求来建立新的线程,直到建立设置的最大线程数

b、必定时间内关闭一些空闲线程,回收部分资源

相关文章
相关标签/搜索