线程池线程数与(CPU密集型任务和I/O密集型任务)的关系
2016-02-21 00:39
435 查看
近期看了一些JVM和并发编程的专栏,结合自身理解,来做一个关于(线程池线程数与(CPU密集型任务和I/O密集型任务)的关系)的总结:
1.任务类型举例:
1.1: CPU密集型:
例如,一般我们系统的静态资源,比如js,css等,会存在一个版本号,如 main.js?v0,每当用户访问这个资源的时候,会发送一个比对请求到服务端,比对本地静态文件版本和服务端的文件版本是否一致,不一致则更新.这种任务一般不占用大量IO,所以后台服务器可以快速处理,压力落在CPU上.
1.2: I/O密集型:
比方说近期我们做的万科CRM系统,常有大数据量的查询和批量插入操作,此时的压力主要在I/O上.
2.线程数与任务类型的关系:
2.1:与CPU密集型的关系:
一般情况下,CPU核心数 == 最大同时执行线程数.在这种情况下(设CPU核心数为n),大量客户端会发送请求到服务器,但是服务器最多只能同时执行n个线程.
设线程池工作队列长度为m,且m>>n,则此时会导致CPU频繁切换线程来执行(如果CPU使用的是FCFS,则不会频繁切换,如使用的是其他CPU调度算法,如时间片轮转法,最短时间优先,则可能会导致频繁的线程切换).
所以这种情况下,无需设置过大的线程池工作队列,(工作队列长度 = CPU核心数 || CPU核心数+1) 即可.
2.2:与I/O密集型的关系:
1个线程对应1个方法栈,线程的生命周期与方法栈相同.
比如某个线程的方法栈对应的入站顺序为:controller()->service()->DAO(),由于DAO长时间的I/O操作,导致该线程一直处于工作队列,但它又不占用CPU,则此时有1个CPU是处于空闲状态的.
所以,这种情况下,应该加大线程池工作队列的长度(如果CPU调度算法使用的是FCFS,则无法切换),尽量不让CPU空闲下来,提高CPU利用率.
若理解有误,请指正.
1.任务类型举例:
1.1: CPU密集型:
例如,一般我们系统的静态资源,比如js,css等,会存在一个版本号,如 main.js?v0,每当用户访问这个资源的时候,会发送一个比对请求到服务端,比对本地静态文件版本和服务端的文件版本是否一致,不一致则更新.这种任务一般不占用大量IO,所以后台服务器可以快速处理,压力落在CPU上.
1.2: I/O密集型:
比方说近期我们做的万科CRM系统,常有大数据量的查询和批量插入操作,此时的压力主要在I/O上.
2.线程数与任务类型的关系:
2.1:与CPU密集型的关系:
一般情况下,CPU核心数 == 最大同时执行线程数.在这种情况下(设CPU核心数为n),大量客户端会发送请求到服务器,但是服务器最多只能同时执行n个线程.
设线程池工作队列长度为m,且m>>n,则此时会导致CPU频繁切换线程来执行(如果CPU使用的是FCFS,则不会频繁切换,如使用的是其他CPU调度算法,如时间片轮转法,最短时间优先,则可能会导致频繁的线程切换).
所以这种情况下,无需设置过大的线程池工作队列,(工作队列长度 = CPU核心数 || CPU核心数+1) 即可.
2.2:与I/O密集型的关系:
1个线程对应1个方法栈,线程的生命周期与方法栈相同.
比如某个线程的方法栈对应的入站顺序为:controller()->service()->DAO(),由于DAO长时间的I/O操作,导致该线程一直处于工作队列,但它又不占用CPU,则此时有1个CPU是处于空闲状态的.
所以,这种情况下,应该加大线程池工作队列的长度(如果CPU调度算法使用的是FCFS,则无法切换),尽量不让CPU空闲下来,提高CPU利用率.
若理解有误,请指正.
相关文章推荐
- 构建自己的PHP框架--定义ORM的接口
- Android 实现可以暂停旋转的ObjectAnmition动画
- 20160208.CCPP体系详解(0018天)
- 20160208.CCPP体系详解(0018天)
- ami bios设置图解
- 20160208.CCPP体系详解(0018天)
- poj 3628 Bookshelf 2
- 搜索JAR包,找类库
- BIOS设置图解教程 Award Bios类型设置详解
- IdentityServer3——入门教程:.NET开源OpenID Connect 和OAuth解决方案IdentityServer v3 术语
- Tomcat中JSP引擎工作原理
- HDOJ 5631 Rikka with Graph(并查集)
- ViewGroup全面分析
- svn服务基础学习与搭建,使用
- java中的堆Heap和栈Stack的区别
- 小家具安装感受
- We Recommend a Singular Value Decomposition
- 【hdu1159】common subsequence —— 二维dp
- C#获取窗口句柄概念和方法实例
- objective c, protocol