最新要闻
- AI热潮推动,七大科技股总市值突破11万亿美元,是德国GDP近三倍
- 国产显卡核心多数是外购:自研太难 绕开国外不现实不划算
- 拖行近1公里!宝马女司机撞人拖行案受害者要抗诉 获刑超6年处罚太轻
- 独居老人没开空调致热痉挛咬断2颗牙:高温一定要及时降温
- 军帽事件下不为例
- 【机构调研记录】国融基金调研工大高科
- 我国火箭首次竞拍:任何人皆可拼单共享 8万元/公斤
- 共享充电宝电用完只充了30% 性价比备受争议
- 4G确实够用!中国工程院院士邬贺铨:5G网速比4G快7倍 但体验几乎没差
- 中国汽车出口有望超日本成第一:不靠特斯拉 上汽才是出海冠军
- 田英章田雪松硬笔字帖·中国绝美古诗词 旅_关于田英章田雪松硬笔字帖·中国绝美古诗词 旅介绍
- 任天堂新机将至!?老任是怎么走上“机能落后”这条路的
- 老人街头散钱66万无人要 称钱非万能:网友感慨周围的人都很好
- 明基推出新款LED投影仪:4000 ANSI流明、30000小时使用寿命
- 花30万买新能源车 我却快被晒成人干了
- 悬赏一千万的狗已找到 主人只给了5000:网友集体怒了
手机

英国房地产因利率上升陷入困境 房价正以2011年来最快速度下跌

宁夏评选出上半年10名“宁夏好人” 95后消防员因敬业奉献入选
- 英国房地产因利率上升陷入困境 房价正以2011年来最快速度下跌
- 宁夏评选出上半年10名“宁夏好人” 95后消防员因敬业奉献入选
- 离婚时共同债务应该怎么处理?
- 华为云盘古大模型3.0正式发布
- 支持自动长文生成,WPS AI发布:基于大语言模型的智能办公助手
- 《街头霸王6》全球总销量突破200万份 卡普空再次为其玩家送上礼物
家电
【后端面经-Java】I/O多路复用 简录
- 0. Java 线程IO模型
- 1. BIO
- 2. NIO
- 3. I/O多路复用(主要)
- 3.1 概念
- 3.2 实现
- 1. select
- 2. poll
- 3. epoll
- 4. AIO
- 5. 技术对比
- 5.1 BIO、NIO、I/O多路复用、AIO对比
- 5.2
select
、poll
、epoll
对比
- 6. 面试模拟
- 参考资料
0. Java 线程IO模型
Java当中的线程I/O模型如图所示:
1. BIO
当一个线程进行I/O操作的时候,传统的做法是阻塞等待,直到I/O操作完成再继续后续的操作,这种IO方式就是BIO(Blocking I/O)。
【资料图】
BIO方式的缺点是:
- 大量并发线程的场景下效率过低;
- 空等待浪费资源;
2. NIO
JDK1.4引入了NIO(No Blocking I/O或者是New I/O)。NIO是一种同步非阻塞的I/O模型,相对于BIO,NIO允许一个线程在I/O操作的时候处理其他任务,但是需要定期轮询检查I/O操作是否完成。NIO的缺点在于:
- 轮询的时间间隔不好把握;
- 一个线程处理一个I/O操作,如果存在大量I/O,处理其他任务和轮询操作反复切换状态,上下文切换开销大;
3. I/O多路复用(主要)
3.1 概念
为了解决NIO的缺点,Linux引入了I/O多路复用的机制,即一个线程可以同时监听多个I/O操作,当某个I/O操作完成后,会通知线程进行处理。多路指的是多个SOCKET连接之间的I/O操作,复用指的是共用一个线程。I/O多路复用的优点在于:
- 一个线程可以同时监听多个I/O操作,减少了线程的数量,避免了线程切换的开销;
需要注意的是,I/O多路复用只有和NIO配合使用才能发挥作用,因为NIO是非阻塞的,所以可以在一个线程中同时监听多个I/O操作,而BIO是阻塞的,一个线程只能处理一个I/O操作,所以无法实现I/O多路复用。
3.2 实现
I/O多路复用的实现思路:对于多个socket连接,程序提供一个文件描述符集合给系统,当某个接口的I/O操作完成后,会通知线程进行处理。
实现I/O多路复用的方式有三种:select
、poll
、epoll
。
1. select
函数原型如下所示:
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
- nfds:文件描述符的数量,即文件描述符集合中最大的文件描述符加1;
- readfds:读文件描述符集合;
- writefds:写文件描述符集合;
- exceptfds:异常文件描述符集合;
- timeout:超时时间;
从参数可以看出来select
方式监听读、写、异常事件。
select
根据监听的事件类型分别创建三个文件描述符数组,然后在timeout时间内阻塞线程进行监听,直到有事件发生或者超时。之后检查数组中是否有事件到达。select
的缺点在于:
- 文件描述符数组大小有限,为1024,因此对于高并发场景并不适用;
- 维持三个文件描述符数组,占据大量的内存空间;
- 每次调用
select
需要将数组从用户空间拷贝到内核空间,同时重新对数组进行遍历查找,效率低;
2. poll
函数原型如下所示:
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
- fds:文件描述符数组;
- ndfs:文件描述符数组的大小;
- timeout:超时时间;
本质的工作过程和select
类似,但是稍微做了改进,只需要构建一个数组,并且数组大小不受限制,而是能够自由指定;poll
的缺点在于:
- 每次调用
poll
之后都需要进行数组遍历,这一点并没有改进
3. epoll
为了解决select
和poll
的缺点,在高并发场景下,不同的操作系统引入了不同的解决方案,例如Linux引入了epoll
、FreeBSD引入了kqueue
、Solaris引入了/dev/poll
。由epoll
实现I/O多路复用,步骤如下:
- 先创建epoll对象:
int epfd = epoll_create(10);
其中,int epoll_create(int size)
会在内核空间开辟一块指定大小的数据表,并由epfd
指向这部分内存。2. 创建好epoll对象之后,使用epoll_ctl
将注册需要监听的事件:
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
epfd
是创建数组之后的内存指针;op
是操作类型,包括三种模式:EPOLL_CTL_ADD
:添加需要监听的事件;EPOLL_CTL_MOD
:修改需要监听的事件;EPOLL_CTL_DEL
:删除需要监听的事件;
fd
是需要监听的文件描述符,需要支持NIO;event
记录了注册事件的具体信息。数据结构如下所示:
typedef union epoll_data { void *ptr; int fd; uint32_t u32; uint64_t u64;} epoll_data_t;struct epoll_event { uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */};
- 使用
epoll_wait
进行监听:epoll_wait
函数原型如下所示:
int epoll_wait(int epfd, struct epoll_event *evlist, int maxevents, int timeout);
epfd
是创建数组之后的内存指针;evlist
是用于存放事件的数组,也是返回的结果数组,包含被触发事件的对应文件描述符;- 这里显示了和
select
、poll
的区别,select
、poll
会返回所有文件描述符然后遍历,而epoll
只会返回被触发事件的文件描述符;
- 这里显示了和
maxevents
是监听事件的最大容量;timeout
是超时时间;监听步骤是block
的,也就是阻塞的,只有超时才会返回;
epoll的优点在于:
- 只返回触发事件的文件描述符,避免了整个数组的遍历;
- 支持水平触发(Level Trigger)和边缘触发(Edge Trigger)两种模式;
- 对于水平触发和边缘触发,具体解释可参考这篇博客;
4. AIO
AIO(Asynchronous I/O),即异步非阻塞I/O模型,AIO的实现方式是基于事件和回调机制的,当一个I/O操作完成后,会通知线程进行处理,因此不需要轮询操作。
AIO和NIO的区别在于:
- NIO:线程需要定时检查I/O操作是否完成;
- AIO:安心去做其他事情,等到通知之后才会进行处理;
5. 技术对比
5.1 BIO、NIO、I/O多路复用、AIO对比
5.2 select
、poll
、epoll
对比
6. 面试模拟
Q:IO多路复用是什么意思?A:IO多路复用指的是一个线程管理多个IO连接,监听多个IO事件;
Q:NIO的具体含义A:NIO一般理解为Not Blocking IO,即非阻塞IO,和传统的BIO(阻塞IO)相比,NIO模型中,一个线程在IO操作的时候可以处理其他任务,定期轮询检查IO操作是否完成
Q:基于什么实现的I/O多路复用?A:传统的实现方式包括
select
、poll
,但是这两类方法都需要遍历数组,效率较低,为此不同的操作系统提出了不同的改进方案,例如solaris提出了/dev/poll
,FreeBSD提出了kqueue
,Linux提出了epoll
,而epoll
相比于select
、poll
的主要区别就是返回的事件列表只包括触发事件的文件描述符,而不是全部监听事件的文件描述符,改进了数组遍历这一监听方式。
参考资料
- 一文彻底理解Java IO模型(阻塞IO非阻塞IO/IO多路复用)
- IO多路复用机制详解
- 讲讲BIO和NIO以及IO多路复用
关键词:
-
-
-
-
【后端面经-Java】I/O多路复用 简录
AI热潮推动,七大科技股总市值突破11万亿美元,是德国GDP近三倍
国产显卡核心多数是外购:自研太难 绕开国外不现实不划算
拖行近1公里!宝马女司机撞人拖行案受害者要抗诉 获刑超6年处罚太轻
独居老人没开空调致热痉挛咬断2颗牙:高温一定要及时降温
军帽事件下不为例
【机构调研记录】国融基金调研工大高科
碳酸锂价格波动大 业内热盼期货期权产品尽早上市
【国际大宗商品早报】国际油价显著上涨超2% 纽约金价涨近1%
我国火箭首次竞拍:任何人皆可拼单共享 8万元/公斤
共享充电宝电用完只充了30% 性价比备受争议
4G确实够用!中国工程院院士邬贺铨:5G网速比4G快7倍 但体验几乎没差
中国汽车出口有望超日本成第一:不靠特斯拉 上汽才是出海冠军
读发布!设计与部署稳定的分布式系统(第2版)笔记22_实例层之日志
田英章田雪松硬笔字帖·中国绝美古诗词 旅_关于田英章田雪松硬笔字帖·中国绝美古诗词 旅介绍
任天堂新机将至!?老任是怎么走上“机能落后”这条路的
老人街头散钱66万无人要 称钱非万能:网友感慨周围的人都很好
盘点学英语的困惑1:反义疑问句
明基推出新款LED投影仪:4000 ANSI流明、30000小时使用寿命
花30万买新能源车 我却快被晒成人干了
悬赏一千万的狗已找到 主人只给了5000:网友集体怒了
因出现地面沉降,深圳文锦渡口岸暂停入境客货车通关业务
蛋白质的作用高中 蛋白质的作用
游客乘船遇西南浪 船舱内晕倒一大片:什么是西南浪?
文心一言 VS 讯飞星火 VS chatgpt (56)-- 算法导论6.3 2题
“全球最热一天”纪录接连被打破:4天上升0.22度、12.5万年来最热
研究称黑巧克力可降低70%抑郁风险:可使人感到愉悦
卫星互联网试验卫星成功发射!你猜干啥用的?
深度金选|股价年内大涨三倍!光无源器件是天孚通信主要支撑,无意“瓜分”光模块市场蛋糕
python-opencv核心库模块core(下)
开心档之Web Quality - 无障碍(WAI)
学生因毕业问题无颜回家流浪10年 网友:家是永远的港湾
什么操作?烈日高温下 女子全副武装趴水泥地上晒背
Docker学习路线1:介绍
Denuvo官方再为D加密伸冤:强调不会影响游戏性能
日本北海道高浓度砒霜泄露:蒸汽喷发高达数十米
厦门人才中心档案 厦门人才中心
全部编辑被开除后:知名游戏网站VGtime官网已无法登陆
顾客买到生瓜留言 2年后收到老板回复:已改行 补偿1斤豆腐
王宝强新片《八角笼中》成绩出色:票房突破8亿大关
高考裸分639:四川考生拿到空军001号招飞录取通知书
405g塞进AMD 7840U!AYANEO AIR 1S正式发布:4699元起
民营卫星直击重庆万州洪水:长江水都变色了
新卓德炮枪,泽丽我才不是刮痧王,不强玩稳吃分
Centos7中禁止root用户远程登录和修改登录端口
历时9年!滇藏铁路丽香段哈巴雪山隧道贯通
89元 联想拯救者M3游戏鼠标上架:8000DPI、支持RGB灯效
暴雨过后,路面积水很快排干,算不算内涝?
时隔四年再次挑战:印度计划7月14日发射“月球3号”探测器
销售顾问播放竞品视频?哈弗副总经理乔心昱:并非系统性销售行为
浏阳市:暑期课堂点亮孩子缤纷假期
通用曲线控件源码定制之设计实现篇(功能丰富灵活) 浮云E绘图
rust 自动化测试、迭代器与闭包、智能指针、无畏并发
String内存模型和Java常用方法
华为云河图KooMap:夯实数字孪生底座,点燃燎原星火
江苏女孩中考742分报考师范专科引争议 家长:不差钱 7年贯通培养有编制
离谱!智己L7后尾灯可以玩“魂斗罗” 奥迪灯厂也得服
售价17.59万起 全新雪弗兰迈锐宝XL上市 这内饰你能接受吗?
顺河镇细处作手推动作风建设
电动轮椅上下班靠谱吗?广州明天举行听证会:事关电动自行车限行
广州一特斯拉闯红灯撞电瓶车致1死 另一路人擦肩而过躲过一劫
线性表
美国地质局调查报告:美国近一半自来水含有毒物质
别买白色、黑色汽车了:保值率堪忧!二手亏出血
分别配齐苹果、OPPO和华为全家桶后:悟出一个深刻道理
对标传祺影豹R?奇瑞艾瑞泽8 2.0T高能版即将上市
【补】托勒密定理
瀚川智能发布100PPM全极耳大圆柱高速自动化装配整线
舒适透气 吸湿排汗:大嘴猴棉背心14元/件(日常24元)
大马拉小车的RTX 4060 Ti 16GB来了:让人看不懂
销量暴跌近七成 被称作“国民神车”的五菱MINI EV为啥卖不动了?
数据交换不失控:华为云EDS,让你的数据你做主
轻松集团马孝武:行业间需要加强协作 进行精细化的养老需求分层
女子找手机乘客干等3小时?东航回应:延误原因是天气及流量控制
职场第一课!大学生暑假涌向工厂流水线:有的目标是挣台iPad
呵护牙龈不含氟 国货品牌田七牙膏:6支到手29.9元 赠牙刷
适合招待客人的家常菜?
当年理科状元:余承东将出任母校霍邱二中鸿蒙班名誉班主任
AMD发布23.7.1 WHQL驱动:RX 7000显卡功耗过高bug终于修复了
张朝阳回应曾患焦虑症并已痊愈:靠心理学彻底治好 自己状态更好了
非常简易的还原分数方法
什么水平?巴黎新援李刚仁曾一条龙远射攻破皇马大门
我国一千年玻璃鸭是全球限量款:仅一件 用途成谜
《真人快打1》裂口女新造型倍受好评:极致恐怖獠牙
给AMD Zen5下马威!Intel 14代酷睿处理器整装待发:性能喜人
启辰发布最新产品计划 每年将推出至少2款新能源车型
湖北启动针对五峰县的省级地质灾害三级响应
美国加州一架飞机失事 现场一片狼藉:机上6名乘客遇难
世界第一! 上半年全国机动车达4.26亿辆 驾驶员超5亿
选读SQL经典实例笔记03_DML和元数据
新疆维吾尔自治区喀什市2023-06-26 01:25发布大风蓝色预警
内存SSD价格低谷已至!但先别贪便宜
健身房被淹教练只能抱出来蛋白粉:损失在100万左右
21年前硫酸泼熊清华大学生任职中科院引热议 专家:没必要看过去
中国工程院院士:我们算力超过时 GDP也可以超过美国了
拉脱维亚新总统宣誓就职
必看的节奏!《碟中谍7》口碑炸翻:阿汤哥从影42年来历史最佳
科技高管们太难了:借酒浇愁、吃药止痛
曝OLED版MacBook Pro生产难度太大:跳票了
Android架构组件LiveData