线程池与非线程池应用场景及模型对比分析
2015-11-11 15:53
344 查看
线程池与非线程池应用场景及模型对比分析
分类: C++ 网络编程2013-12-2311:14 1608人阅读 评论(0) 收藏 举报
在网络编程中经常用到线程池和连接池,今天就对其中常用的线程池的基本应用场景和模型做个简单的对比分析。
1、 业务流程对比
a、 非线程池业务流模型:
上图标识了基本的非线程池的线程模型,前端1有多少连接则前端客户端2与前端服务器端3均需建立一对一的线程数进行响应的连接。前端服务器端3与后端服务器端4也需建立响应数目的线程进行连接处理相关业务。
当一个任务处理完毕后线程退出,在下一个任务到来的时候前端服务器端创建新的线程来处理新的任务。
b、线程池模型:
上图标识了基本的线程池模型。前端客户端大量的连接通过服务端的任务接收线程将连接任务放入前端服务器端的任务队列中,前端服务器端起固定数量的处理线程处理前端的任务,当处理线程处理完任务后从任务队列中获取下一个处理任务。保证了前端服务器端和后端服务器端的连接数不会超过前端服务器端的处理任务线程数n,从而保证了后端服务器端的压力。
当处理线程处理完一个任务而任务队列中没有任务的时候线程并不退出,阻塞等待新的任务。
通过上图可以看出,当前端服务器端通过设置合理的处理线程数和任务队列大小,可以有效的屏蔽前端客户端高并发量对后端服务器端的冲击。
2、 应用场景分析对比
a、 非线程池模型
适用于单次连接任务执行时间较长,并发量不高的情况。一旦并发量很高则线程频繁创建的开销是巨大的。
b、 线程池模型
适用于单次任务执行时间较短,但并发访问量高的情况。当处理线程数设置极大的时候和非线程池模型几乎没有差别
3、 优化细节
a、在线程池模型中,可以预创建部分处理线程,随后根据实际的业务需求来创建新的线程,直到创建设置的最大线程数
b、一定时间内关闭一些空闲线程,回收部分资源
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- Overview of solrconfig.xml 之 Common XML data-structure and type elements
- 表空间基于时间点的恢复(TSPITR)
- iOS加密之MD5加密
- nodejs 入门
- 登录
- C++ 用libcurl库进行http通讯网络编程和简介
- svn: OPTIONS of 'xxx': 200 OK
- 使用tmux
- iOS的主要框架介绍
- 各类 HTTP 返回状态代码详解
- SQL基础
- ASP.NET MVC架构与实战系列之四:MVC实例演练
- SAP Query -
- 连云港一卡通客服系统(账户类)
- css3的各种用法的地址,方便以后查询
- Android自定义控件--组合控件
- Android快速SDK(23)第三方授权登录库ThirdLogin【肌肉记忆,分钟接入】
- SeekBar控件入门
- shell here document 应用实例--shell控制数据库
- 多线程