横岗网站设计,个人管理系统,济南智能网站建设咨询电话,vuejs 网站开发关于生产环境如何配置线程数#xff0c;还是要根据业务来进行区分#xff0c;我们时常会听到什么IO密集型、CPU密集型任务...那么这里提一个问题#xff1a;大家知道什么样的任务或者代码会被认定为IO/CPU密集#xff1f;又是用什么样的标准来认定IO/CPU密集#xff1f;如… 关于生产环境如何配置线程数还是要根据业务来进行区分我们时常会听到什么IO密集型、CPU密集型任务...那么这里提一个问题大家知道什么样的任务或者代码会被认定为IO/CPU密集又是用什么样的标准来认定IO/CPU密集如果你没有明确的答案那么就随着这篇文章一起来聊一聊吧。开篇之前我们先来了解下什么是CPU密集型和IO密集型CPU密集型CPU-boundCPU密集型也叫计算密集型顾名思义就是应用需要非常多的CPU计算资源系统运作大部分的状况是CPU Loading 100%CPU要读/写I/O(硬盘/内存)I/O在很短的时间就可以完成而CPU还有许多运算要处理CPU Loading很高。在多核CPU时代我们要让每一个CPU核心都参与计算将CPU的性能充分利用起来这样才算是没有浪费服务器配置如果在非常好的服务器配置上还运行着单线程程序那将是多么重大的浪费。代码体现int n 0.0
for (i in 0..9999999) {n Math.cos(i.toDouble())平常开发应用场景CPU密集型任务一般来说计算型代码、Bitmap转换、Gson转换等IO密集型I/O bound对于IO密集型的应用就很好理解了我们现在做的开发大部分都是WEB应用涉及到大量的网络传输。不仅如此与数据库与缓存间的交互也涉及到IO一旦发生IO线程就会处于等待状态当IO结束数据准备好后线程才会继续执行。因此从这里可以发现对于IO密集型的应用我们可以多设置一些线程池中线程的数量这样就能让在等待的这段时间内线程可以去做其它事提高并发处理效率。代码体现BufferedReader br new BufferedReader(new FileReader(xxxx), 1024)
try {while (br.readLine() ! null) {}
} finally {if (br ! null) {br.close()}平常开发应用场景文件读写、DB读写、网络请求等日常开发中如何优化计算密集型任务的特点是要进行大量的计算消耗CPU资源比如计算圆周率、对视频进行高清解码等等全靠CPU的运算能力。这种计算密集型任务虽然也可以用多任务完成但是任务越多花在任务切换的时间就越多CPU执行任务的效率就越低。所以要最高效地利用CPU计算密集型任务同时进行的数量应当等于CPU的核心数线程数 CPU核数1也可以设置成CPU核数*2这还是要看JDK的使用版本以及CPU配置(服务器的CPU有超线程)。对于JDK1.8来说里面增加了一个并行计算计算密集型的较理想线程数 CPU内核线程数*2IO密集型涉及到网络、磁盘IO的任务都是IO密集型任务这类任务的特点是CPU消耗很少任务的大部分时间都在等待IO操作完成因为IO的速度远远低于CPU和内存的速度。对于IO密集型任务任务越多CPU效率越高但也有一个限度。常见的大部分任务都是IO密集型任务比如Web应用线程数 CPU核心数/(1-阻塞系数)这个阻塞系数一般为0.8~0.9之间也可以取0.8或者0.9。套用公式对于双核CPU来说它比较理想的线程数就是20当然这都不是绝对的需要根据实际情况以及实际业务来调整。Java并发内容还有很多比如同步工具类、lock类原子类、集合相关类、Executor框架相关类当然还有一张更详细的图内容容太多很多小伙伴都迫不及待的想获取但是并发知识大一口吃不下。想成为一名优秀的Java开发学好并发还是要静下心来好好学习学好了绝对是你走入高薪行列的必备能力。这次小编周末和京东的Monkey大佬一起吃了个饭聊了下这个并发编程如何学习他是这方面的专家之前在京东内部也做过很多这方面的分享我特邀请他为大家来开设专栏小课内容如下《Java并发编程》深度精讲这期课程是根据一线大厂面试内容专门开设并且限时0.02元针对技术人的面试考点与成长路径给程序员传授实用的技能跟面试技巧培养真正符合一线互联网公司用人需求的人才。针对具体技能进行深度剖析讲解结合一线互联网大厂热门面试题详析搞定大厂面试拿下心仪offer。赶紧上车报名的同学还有机会获取金三银四面试书一本。点击扫码即可购课~点击阅读原文也可购课~