关于生产环境如何配置线程数,还是要根据业务来进行区分,我们时常会听到什么IO密集型、CPU密集型任务...

那么这里提一个问题:大家知道什么样的任务或者代码会被认定为IO/CPU密集?又是用什么样的标准来认定IO/CPU密集?

如果你没有明确的答案,那么就随着这篇文章一起来聊一聊吧。

开篇之前我们先来了解下什么是CPU密集型和IO密集型

CPU密集型也叫计算密集型,顾名思义就是应用需要非常多的CPU计算资源,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。

在多核CPU时代,我们要让每一个CPU核心都参与计算,将CPU的性能充分利用起来,这样才算是没有浪费服务器配置,如果在非常好的服务器配置上还运行着单线程程序那将是多么重大的浪费。

代码体现:

平常开发应用场景:CPU密集型任务一般来说:计算型代码、Bitmap转换、Gson转换等


对于IO密集型的应用,就很好理解了,我们现在做的开发大部分都是WEB应用,涉及到大量的网络传输。不仅如此,与数据库,与缓存间的交互也涉及到IO,一旦发生IO,线程就会处于等待状态,当IO结束,数据准备好后,线程才会继续执行。因此从这里可以发现,对于IO密集型的应用,我们可以多设置一些线程池中线程的数量,这样就能让在等待的这段时间内,线程可以去做其它事,提高并发处理效率。

代码体现:


平常开发应用场景:文件读写、DB读写、网络请求等


计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低。所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核心数


IO密集型,涉及到网络、磁盘IO的任务都是IO密集型任务,这类任务的特点是CPU消耗很少,任务的大部分时间都在等待IO操作完成(因为IO的速度远远低于CPU和内存的速度)。对于IO密集型任务,任务越多,CPU效率越高,但也有一个限度。常见的大部分任务都是IO密集型任务,比如Web应用



Java并发内容还有很多比如同步工具类、lock类原子类、集合相关类、Executor框架相关类

各大厂面试高频的面试题新鲜出炉,你能答上几道?-LMLPHP

当然还有一张更详细的图

各大厂面试高频的面试题新鲜出炉,你能答上几道?-LMLPHP

内容容太多,很多小伙伴都迫不及待的想获取,但是并发知识大,一口吃不下。想成为一名优秀的Java开发,学好并发还是要静下心来好好学习,学好了绝对是你走入高薪行列的必备能力。


这次小编周末和京东的Monkey大佬一起吃了个饭,聊了下这个并发编程如何学习,他是这方面的专家,之前在京东内部也做过很多这方面的分享,我特邀请他为大家来开设专栏小课,内容如下:


各大厂面试高频的面试题新鲜出炉,你能答上几道?-LMLPHP


《Java并发编程》深度精讲!这期课程是根据一线大厂面试内容专门开设,并且限时0.02元!针对技术人的面试考点与成长路径,给程序员传授实用的技能跟面试技巧,培养真正符合一线互联网公司用人需求的人才。针对具体技能进行深度剖析讲解,结合一线互联网大厂热门面试题详析,搞定大厂面试,拿下心仪offer。


赶紧上车,报名的同学还有机会获取金三银四面试书一本。点击扫码,即可购课~

各大厂面试高频的面试题新鲜出炉,你能答上几道?-LMLPHP


点击阅读原文也可购课~

本文分享自微信公众号 - Java中文社群(javacn666)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

03-24 15:29