Netty二、三种IO模式

Netty

本节问题

  • 什么是经典的三种IO模式?
  • Netty对三种IO模式的支持
  • 为什么Netty仅仅支持NIO?
  • 为什么Netty有多种NIO实现?
  • NIO一定优于BIO吗?
  • 源码解决Netty怎么切换IO模式

经典的三种IO模式

现实例子

当我们去饭店吃饭的时候:

  • 食堂排队打饭模式:排队,打好再走
  • 点单、等待被叫模式:等待被叫,好了自己去端。
  • 包厢模式:点单后菜直接被端上桌子

类比:

  • 饭店-》服务器
  • 饭菜-〉数据
  • 饭菜好了-》数据就绪
  • 端菜/送菜-〉数据读取

在这里插入图片描述

阻塞与非阻塞

  • 菜没好,要不要死等-》数据就绪前要不要等待?
  • 阻塞:没有数据传过来的时候,读会阻塞直到有数据,缓冲区满的时候,写操作也会阻塞。非阻塞遇到这些情况,都是直接返回。

同步与异步

  • 菜好了谁端-》数据就绪以后,数据操作谁来完成?
  • 数据就绪之后需要自己去读是同步,数据就绪系统直接读好再回调给程序是异步。

在这里插入图片描述

为什么Netty仅支持NIO?

  • 为什么不建议使用BIO?
    连接数高的时候,阻塞-》消耗资源、效率低
  • 为什么删掉已经做好的AIO的支持?
    Windows实现成熟,但是很少用来做服务器
    Linux常常用来做服务器,但是AIO实现不够成熟
    Linux下AIO相比较NIO的性能提升不明显。

NIO的多种实现

在这里插入图片描述
通用的NIO实现(Common)在Linux下实现也是使用epoll,为什么自己单独实现?
实现的更好!!!

  • Netty暴露了更多的可控参数,例如:
    JDK的NIO默认实现是水平触发
    Netty是边缘触发(默认)和水平触发可切换
  • Netty实现的垃圾回收更少,性能更好

NIO一定优于BIO吗?

  • BIO代码简单
  • 特点场景:连接数少,并发度低,BIO性能不输NIO。

解读Netty怎么切换IO模式的

  • 怎么切换?
  • 原理是什么?
  • 为什么服务器开发并不需要切换客户端对应Socket?

Netty如何支持三种Reactor?

视频10

发布了105 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_38367817/article/details/105556810