小插曲——NIO的前世今生

作者: 程序员北游 | 来源:发表于2019-03-13 16:14 被阅读126次

发展:

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可以随意读。

感谢支持,我会更加努力分享,喜欢的朋友可以关注下专栏:Java架构技术进阶。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。最后针对高频常问面试题我还总结出了适合于1-5年以上开发经验的java程序员面试涉及到的绝大部分面试题答案做成了文档和学习笔记文件以及架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习,也可以关注我一下以后会有更多干货分享。免费获取方式:加入Java进阶之路:[878249276]

相关文章

  • 小插曲——NIO的前世今生

    发展: BIO -> NIO -> AIO BIO就是我们传统意义上的IO,它的特点是阻塞的。例如以前我们进行网络...

  • Reactor反应式模式(事件驱动模式)

    一 reactor的前世今生 高性能IO绕不开Reactor模式,NIO是Java对Reactor模式的实践,而...

  • 前世今生-笛子独奏

    《新白娘子传奇》插曲《前世今生》,我分别用梆笛与曲笛独奏。 莫非前世那一眼 只为今生见一面 匆匆美梦奈何天 爱到深...

  • Netty 与 NIO 之前世今生

    缓冲区(Buffer) Buffer 操作基本 API 缓冲区本质是一个数组,在NIO中,所有数据都需要缓冲区来处...

  • 你相信有前世吗……

    有人相信人有前世今生吗?小的时候,人生才刚刚开始,根本没有前世今生的概念;长大了,年轻时涉世未深,听到前世今生的故...

  • 生命里的光

    “你是前世未止的心跳……”听着这首《白蛇传》里面的插曲,竟然会有一种要落泪的感觉,前世的情,今生续,该是有多么深厚...

  • 将军在上之男昭女惜重生三世千年孽缘

    前世!今生!来世再续! 前世欠谁!今生还!来世再续前缘! 前世因!今生续!来世果!

  • 前世,今生,浪漫语录摘

    前世,我叫你一声妖仙姐姐。 今生,你还我一句道士哥哥。 前世,你叫我二货道士。 今生,我叫你小蠢货。 前世,我说我...

  • 狐妖小红娘。

    前世,我叫你一声妖仙姐姐。 今生,你还我一句道士哥哥。 前世,你叫我二货道士。 今生,我叫你小蠢货。 前世,我说我...

  • 小故事 前世今生

    听说,人死后有执念,过了奈何桥,不肯喝孟婆汤的人,孟婆都会给他的胸前点一颗痣,让他记住前世的爱人,让他来世可以找到...

网友评论

    本文标题:小插曲——NIO的前世今生

    本文链接:https://www.haomeiwen.com/subject/tnrtmqtx.html