Netty支持的三种I/O模式

简介: Netty支持的三种I/O模式

1 经典I/O模式

BIO (阻塞I/O) JDK1.4前
NIO (非阻塞 I/O) JDK1.4 (2002 年,java.nio 包)
AIO(异步 I/O) JDK1.7 (2011 年)

1.2 对比概念

阻塞与非阻塞

数据就绪前要不要等待?

  • 阻塞:没有数据传过来时,读会阻塞直到有数据;缓冲区满时,写操作也会阻塞
  • 非阻塞:直接返回

阻塞的:

// 创建一个ServerSocket
ServerSocketChannel serverChannel = ServerSocketChannel.open();
serverChannel.bind(new InetSocketAddress(8080));
// 设置为非阻塞模式
serverChannel.configureBlocking(false);
// 阻塞模式
serverChannel.accept();

同步与异步

数据就绪后,数据操作谁完成?

  • 需要自己去读是同步
  • 数据就绪直接读好再回调给程序是异步

2 Netty 对三种 IO 的支持变迁

  • 划线的已不再支持了哦!
  • image.png

为什么废除阻塞I/0 (BIO/OIO) ?

连接数高的情况下:阻塞 -> 耗资源、效率低。

阻塞意味着等待,等待就会一直占用该线程,当连接数高时,大多线程又在等待,就会耗尽系统的线程资源。

为什么删掉已经做好的AIO支持?

  • Windows实现成熟,但其很少用做服务器
  • Linux常用做服务器,但其AlO实现不够成熟
  • Linux下AIO相比较NIO的性能提升不明显

所有 netty 也是联系实际情况才有选择地支持高性能的 IO 模式。

为什么 Netty 支持多种实现?

让我们再看一次表格

image.png

通用NIO实现(Common)在Linux下也是epoll,但Netty依旧选择自己实现,因为更好:

Netty提供更多可控参数:

  • JDK的NIO默认实现是水平触发
  • Netty 是边缘触发(默认)和水平触发,且可切换

Netty实现的垃圾回收更少、性能更好

NIO 一定优于 BIO

BIO 代码简单且在特定场景:连接数少,并发度低,BIO 性能不输NIO。当然考虑业务发展后期都是复杂场景了,所以 Netty 只考虑 NIO。

目录
相关文章
|
监控 NoSQL Java
Netty高性能架构之Reactor模式
在讨论Netty的架构模式之前,我们先来介绍下Reactor模式,因为Netty的架构模式是在此基础上演变而来的
Netty高性能架构之Reactor模式
灵魂一击!Netty系列笔记之Reactor模式(建议收藏)
一、什么是 Reactor 三种 IO 模式和对应的开发模式如下: BIONIOAIOThread-Per-ConnectionReactorProactor Reactor 是一种开发模式,核心流程为: 1、注册感兴趣的事件 2、扫描是否有感兴趣的事件发生 3、事件发生后做相应的处理
|
Java
Netty「基石」之Reactor模式
Netty「基石」之Reactor模式
192 0
|
设计模式 Java 程序员
Netty线程模型 - Reactor 模式
我相信有很多人会对这个Reactor模式比较陌生,但是Netty这个名字大家都会比较熟悉,即使没有学习使用过,也会对它有所耳闻,它可以说是Java高性能网络编程的代名词。Reactor模式就是Netty线程模型设计的核心,本文我们就以Reactor模式入手,探究一下经典的设计。
179 0
|
Java 调度
【Netty】反应器 Reactor 模式 ( 单反应器 Reactor 单线程 | 单反应器 Reactor 多线程 )
【Netty】反应器 Reactor 模式 ( 单反应器 Reactor 单线程 | 单反应器 Reactor 多线程 )
184 0
【Netty】反应器 Reactor 模式 ( 单反应器 Reactor 单线程 | 单反应器 Reactor 多线程 )
|
缓存 网络协议 安全
【Netty】Netty 简介 ( 原生 NIO 弊端 | Netty 框架 | Netty 版本 | 线程模型 | 线程 阻塞 IO 模型 | Reactor 模式引入 )
【Netty】Netty 简介 ( 原生 NIO 弊端 | Netty 框架 | Netty 版本 | 线程模型 | 线程 阻塞 IO 模型 | Reactor 模式引入 )
227 0
【Netty】Netty 简介 ( 原生 NIO 弊端 | Netty 框架 | Netty 版本 | 线程模型 | 线程 阻塞 IO 模型 | Reactor 模式引入 )
|
Java
Netty的Reactor模式(上)
Netty的Reactor模式
148 0
Netty的Reactor模式(上)
Netty中的策略者模式
Netty中的策略者模式
113 0