拉稀算法
关于NIO,我的通俗理解
原创
关注作者
前往小程序,Get
更优
阅读体验!
立即前往
腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
拉稀算法
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
社区首页
>
专栏
>
关于NIO,我的通俗理解
关于NIO,我的通俗理解
原创
拉稀算法
关注
修改于 2021-08-03 10:32:02
367
0
修改于 2021-08-03 10:32:02
举报
文章被收录于专栏:
叫我技术笔记
叫我技术笔记
叫我技术笔记
IO的实现依赖于系统调用,系统调用需要从用户态切换到内核态,会消耗系统资源,白白浪费掉若干机器周期。
IO是慢操作,一个线程去等待IO的完成,极可能会造成阻塞。
一个文件的IO至少需要一次系统IO调用,在用户态作事件轮询可能会触发多次系统调用。
内核函数select/poll/epoll就是把原本一个文件IO的完成需要多次系统调用降到了恒定的1次或2次,它的实现原理就是将IO状态的轮询操作从用户态转移到了内核态,极大减少内核切换。
在内核态对IO状态的问询时,一旦发现有IO事件在内核里数据缓冲完毕就会立即返回,用户态得到消息后,再触发一次系统IO调用把数据复制到用户内存里,此时IO完毕。
epoll把内核空间与用户内存空间作了一层映射mmap,因而它直接将IO数据包写入用户内存空间,砍掉将数据从内核复制到用户内存空间的步骤,极大提高IO效率。
NIO是非阻塞IO,不是异步IO(AIO)。异步的本质是控制反转,即:我不主动去问你有没有加载完毕,而是要你加载完毕后主动告知我。
IO多路复用,即多条IO请求共用一次状态问询调用;事件轮询,即:在死循环中问你点事儿。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系
cloudcommunity@tencent.com
删除。
java
socket编程
微服务
云计算
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系
cloudcommunity@tencent.com
删除。
java
socket编程
微服务
云计算
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
LV.
关注
文章
0
获赞
0
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐