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

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

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

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

CPU密集型(CPU-bound)

CPU密集型也叫计算密集型,顾名思义就是应用需要非常多的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内核线程数*2

IO密集型,涉及到网络、磁盘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。

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

点击阅读原文也可购课~

各大厂面试高频的面试题新鲜出炉,你能答上几道?相关推荐

  1. XiyouLinuxGroup2021免试题新鲜出炉!是极客你就来!

    西邮Linux兴趣小组直属于西安邮电大学计算机学院,由王亚刚老师,王聪,刘洋等同学于2006年9月策划并组建,现已成为陕西省具有深远影响力的开源技术社区.小组本着"学习Linux系统,崇尚自 ...

  2. 广联达无领导小组面试题 新鲜出炉

    在金九银十接近尾声的时候,参加了一场广联达的无领导小组面试,这是我第一参加无领导面试,感触颇深. 下面我来讲讲面试流程及个人感受. 面试流程: 1.面试官将每八人分成一组并给小组一个需要讨论的项目题. ...

  3. 五万字前端面试宝典——前端百题斩(上)新鲜出炉

    从2021年5月9号开始更新<前端百题斩>,目前终于取得了阶段性成果,<前端百题斩>上册已经更新完毕,内容包括JS基础篇.浏览器篇.网络篇,共计50个章节,5万多字.关注公众号 ...

  4. 华为薪资等级结构表2020_互联网大厂职级薪酬2020版新鲜出炉

    2020年互联网大厂职级&薪资新鲜出炉,知己知彼,百战百胜,你有必要了解下目前的市场行情,对不对? 2020年大厂技术线职级&薪资一览表 备注:同一职级平均来看,产品线对应薪酬约为技术 ...

  5. 又涨了!2021 年 5 月程序员工资统计新鲜出炉,网友:还是Java程序员牛逼~

    新鲜出炉!2021年5月全国招收程序员429056人.2021年5月全国程序员平均工资14926元,工资中位数13000元,其中96%的人的工资介于1750元到75000元. 部分城市程序员工资收入情 ...

  6. 开年第一炸:黑马程序员1月就业报告新鲜出炉!

    春节假期完结,进入开工模式,是时候打起精神,以元气满满的状态开启新的奋斗. 当代打工人年前必聊年终奖,年后的话题焦点非跳槽莫属.新年新气象,很多人摩拳擦掌跃跃欲试,计划着换个好工作. 在大家还翘首期盼 ...

  7. 新鲜出炉的一款SpringBoot +Vue的考试系统

    一.考试系统简介 新鲜出炉的一款SpringBoot +Vue的考试系统,支持多种题型:选择题.多选题.判断题.填空题.综合题以及数学公式.支持在线考试,教师在线批改试卷. 二.项目架构 后端技术栈 ...

  8. 75 道 BAJT 中高级 Java 面试题,你能答上几道?

    整理了下 BATJ 关于 JAVA 的面试题目,大家参考下吧,希望对大家有所帮助,可以帮大家查漏不缺. 答对这些面试题,PASS 掉 80 % 的求职竞争者. 谨以此文献给所有爱我的和我爱的人 has ...

  9. 2021绵阳南山高考一诊成绩查询,新鲜出炉!2021届绵阳一诊官方划线公布!一本线文509分,理475分!附全科真题...

    原标题:新鲜出炉!2021届绵阳一诊官方划线公布!一本线文509分,理475分!附全科真题 2021绵阳一诊划线已经正式公布!文科一本线509分,理科一本线475分!金钥匙学校为考生家长们带来此次考试 ...

最新文章

  1. 到底什么是故事点(Story Point)?
  2. 前端资源系列(2)-SublimeText快捷键大全
  3. Asp.net based Web Application部署后的问题
  4. BUUCTF--[GWCTF 2019]re3学习记录
  5. QDoc创建帮助项目文件
  6. 用Unity盖房子(一):《勇者斗恶龙:建造者2》游戏功能的猜想
  7. 第15节 三个败家子(15)—— 总被死后累
  8. linux 自修改代码 smc,[Win32]自修改代码SMC
  9. canvas 华为tree
  10. 【小程序】小程序开发工具的主要环境设置
  11. printer: PJL
  12. JAVA_OPTS设置详解
  13. 自动化测试框架[Cypress测试实例凸显其优势]
  14. win10笔记本或电脑WLAN密码忘记了不怕,【win10】查看以前连接过的wifi密码
  15. 室内VR全景怎么拍?全景拍摄需要什么设备?
  16. addActionListener
  17. iOS和Android上的本机心理健康监控:现在不是时候了吗?
  18. 一名开源工程师的自白
  19. BIM模型文件下载——多层住宅楼建筑群施工场地模拟模型
  20. 【android studio】

热门文章

  1. CentOS 7.1下KVM的安装与配置
  2. Windows 7 SID 修改
  3. 【rman】list archivelog all与list backup of archivelog all
  4. Intent, Bundle, ListView的简单使用
  5. ASP.NET中常用的26个优化性能方法(1-10)
  6. android Fragments详解一:概述
  7. 面板Ext.Panel使用
  8. OSPF单域实验报告
  9. 产品文档如何说清楚产品业务?关注这几点就够了
  10. win10 设置游戏全屏