前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小插曲——NIO的前世今生

小插曲——NIO的前世今生

作者头像
慕容千语
发布2019-06-11 23:10:08
3270
发布2019-06-11 23:10:08
举报
文章被收录于专栏:慕容千语的架构笔记

发展:

BIO -> NIO -> AIO

BIO就是我们传统意义上的IO,它的特点是阻塞的。例如以前我们进行网络编程时,一个客户端使用一个线程来进行处理。这样会导致一个问题:服务器的线程数是有限制的,而不是每个客户端时时都有数据进行传输的。所以大量空的线程占了位置,但是又不工作,导致服务器的性能受限。

这会涉及到4次上下文切换和4次拷贝。

第一次切换:从用户态切换到内核态,将数据读取到内核

第二次切换:从内核态切换到用户态,读取返回

第三次切换:从用户态切换到内核态,将数据拷贝到内核

第四次切换:从内核态切换到用户态,写完返回

四次拷贝:

1.通过DMA将数据从硬件拷贝到内核

2.通过CPU将数据从内核拷贝到用户缓冲

3.通过CPU将数据从用户缓冲拷贝到内核

4.从内核写入到硬件

NIO:一个请求对应一个线程,解决BIO高并发的问题。

会涉及到3次拷贝,2次切换:

第一次拷贝:从硬件到内核空间

第二次拷贝:从内核空间到socket buffer

第三次拷贝:从socket buffer到protocol engine

第一次切换:从用户态切换到内核态,数据通过DMA将数据拷贝到内核

第二次切换:数据写完到硬件后返回,从内核态切换到用户态

BIO和NIO对比:

BIO基于流,而NIO基于 Buffer. BIO 只能按照顺序读,而NIO可以随意读。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.03.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档