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

关于生产环境如何配置线程数,还是要根据业务来进行区分,我们时常会听到什么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。

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

点击阅读原文也可购课~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c/c++如何获取数组的长度

2019独角兽企业重金招聘Python工程师标准>>> C、C中没有提供 直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使 用sizeof(array) / s…

【送给读者】全新苹果 AirPods,包邮送一套!

为回馈长期以来科创人读者对本栏目的关注支持,本周小编联合了计算机领域八位高质量原创号主一起为大家送出一套 全新苹果AirPods 2代。以下推荐的公号原创率都很高,均为个人IP号,有些小伙伴应该已经关注部分公号。本次抽奖采用第三方抽奖小程…

进程控制(kill)

为什么80%的码农都做不了架构师?>>> kill:终止进程(或传送信号到某进程) kill [options] [process_ids] kill命令可以发送信号给进程,可以终止(terminate)(默认操作&a…

Swagger增强神器:Knife4j!用它轻松实现接口搜索、Word下载、接口过滤...

视频版内容:Swagger 是开发中最常用的框架之一了,但 Swagger 本身又有很多不完善的地方,比如,在众多的接口中查询某一个接口,又或者是把所有的接口导出成 Word 格式等,都无法在 Swagger 中实现。有人可能会…

7种可能会导致内存泄漏的场景!

虽然Java程序员不用像C/C程序员那样时刻关注内存的使用情况,JVM会帮我们处理好这些,但并不是说有了GC就可以高枕无忧,内存泄露相关的问题一般在测试的时候很难发现,一旦上线流量起来可能马上就是一个诡异的线上故障。1. 内存泄露的…

logstash 过虑nginx访问日志

标题是不是可以翻译成这样:logstash Filters nginx access log好了,进入正题,日志管理服务器我用ElasticSearchLogStashKibanaRedis先说下我的架构:远程NGINX采集日志数据到REDISlogstashelasticsearchkibana服务器至于怎么部署&a…

Spring中的重试功能!嗯,有点东西

来源:https://albenw.github.io/posts/69a9647f/概要Spring实现了一套重试机制,功能简单实用。Spring Retry是从Spring Batch独立出来的一个功能,已经广泛应用于Spring Batch,Spring Integration, Spring for Apache Hadoop等Spring项目。 本…

关于Shell的一些常用命令

2019独角兽企业重金招聘Python工程师标准>>> ls -lat 列出当前目录所有东东的东东 ls -lath 人看的大小 ls -F | grep "/$"只搞目录 ls -lR 包括子目录… ls --ignore filename -lt 忽略某个 which,在PATH变量指定的路径中,搜索看某…

用Netty撸一个心跳机制和断线重连!

来源:www.jianshu.com/p/1a28e48edd92心跳机制何为心跳所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.注:心跳包还有另一个作用,经常被忽略,即&…

ThreadLocal线程范围内的共享变量

模拟ThreadLocal类实现:线程范围内的共享变量,每个线程只能访问他自己的,不能访问别的线程。 package com.ljq.test.thread;import java.util.HashMap; import java.util.Map; import java.util.Random;/*** 线程范围内的共享变量* * 三个模块…

Java中操作Excel的3种方法,太好用了!

一、介绍在平时的业务系统开发中,少不了需要用到导出、导入excel功能,今天我们就一起来总结一下,如果你正为此需求感到困惑,那么阅读完本文,你一定会有所收获!二、poi大概在很久很久以前,微软的…

代理服务器Tengine的研究与测试

代理服务器Tengine的研究与测试一、Tengine介绍1.首先要知道什么Nginx1)Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由…

不错!SpringBoot发布Jar包优化瘦身指南!

概要说明随着Spring Boot的流行,大家体验到只需构建输出一个jar文件,然后只需一个java -jar命令就能部署运行应用的爽快。常见一些单体应用随着项目规模的扩展单个jar文件的大小越来越大,动辄两三百MB。如果再引入微服务架构,动辄…

CountDownLatch:别浪,等人齐再团!

一入王者深似海,从此对象是路人。哈喽观众老爷们大家好,我是战神吕布字奉先,今天给大家来一部吕布的教学视频!咳咳,不对。大家好,我是磊哥,今天给大家来一篇 CountDownLatch 的文章。在开始之前…

附彩蛋|Spring Security 竟然故意延长登录时间?知道真相的我惊呆了!

2011年12月21日,有人在网络上公开了一个包含600万个CSDN用户资料的数据库,数据全部为明文储存,包含用户名、密码以及注册邮箱。事件发生后CSDN在微博、官方网站等渠道发出了声明,解释说此数据库系2009年备份所用,因不明…

DirectX 矩阵

基础: 下标:第一个下标为该元素所在行的索引,第二个下标为该元素所在列的索引。如下图所示 行向量和列向量:只有单行的向量称为行向量,只有单列的称之为列向量。 相等 维数和元素都相等 数乘(与标量相乘) 每一个元素与…

为什么阿里内部不允许用Executors创建线程池?

来源:cnblogs.com/zjfjava/p/11227456.html1. 通过Executors创建线程池的弊端在创建线程池的时候,大部分人还是会选择使用Executors去创建。下面是创建定长线程池(FixedThreadPool)的一个例子,严格来说,当使…

RabbitMQ中7种消息队列和保姆级代码演示!

blog.csdn.net/qq_32828253/article/details/110450249七种模式介绍与应用场景简单模式(Hello World)做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B应用场景:…

CyclicBarrier:人齐了,老司机就发车了!

作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)上一篇咱讲了 CountDownLatch 可以解决多个线程同步的问题,相比于 join 来说它的应用范围更广,不仅可…

iOS平台快速发布HT for Web拓扑图应用

iOS平台一直是封闭的生态圈,iOS开发者要缴纳年费加入开发者计划才可进行iOS平台的APP开发测试,所开发的APP需要上传到App Store经过苹果审核以后才可对外发布。如果要开发企业内部应用,则要缴纳更高的费用购买企业账户才可以。 对于现在火如荼…