JavaDriver JavaDriver
首页
  • 基础
  • 并发
  • JVM
  • 设计模式
  • 计算机网络
  • 操作系统
  • 数据结构
  • 算法
  • MYSQL
  • REDIS
  • Netty
  • Kafka
系统设计
非技术
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YoungAnn

西二旗Java老司机一枚 致力于社会主义添砖Java
首页
  • 基础
  • 并发
  • JVM
  • 设计模式
  • 计算机网络
  • 操作系统
  • 数据结构
  • 算法
  • MYSQL
  • REDIS
  • Netty
  • Kafka
系统设计
非技术
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Netty

    • Netty
      • 1.1 I/O基础入门
        • 1.1.1 linux网络I/O模型简介
        • I/O多路复用技术
      • 1.2 Java的IO演进
      • 2.1 传统的BIO编程
        • 2.1.1 BIO通信模型图
      • 2.2 伪异步IO模型
      • 2.3 NIO模型
      • 2.3.1 NIO简介
      • 2.3.2 NIO服务序列图
      • 2.4 AIO
    • TCP粘包拆包问题的解决之道
    • Netty中有哪些解码器?
    • 为什么Netty要自己写一个ByteBuf
    • ChannelPipeline和ChannelHandler
    • EventLoop和EventLoopGroup
    • Java NIO了解吗?
  • Kafka

  • 中间件
  • Netty
YoungAnn
2020-05-21
目录

Netty

# 1.1 I/O基础入门

Java1.4之前对I/O的支持并不完善,给开发带来的问题有:

  • 没有数据缓冲区,I/O性能存在问题
  • 没有C/C++中channel的概念,只有输入输出流
  • BIO会导致通信被长时间阻塞
  • 支持的字符集优先,硬件移植性不好

# 1.1.1 linux网络I/O模型简介

linux中所有的外部设备都是一个文件,socket也是一个文件,有文件描述符(fd)指向它。 UNIX提供5中I/O模型:

  • BIO模型:在进程空间调用recvfrom,直到有数据才返回。
  • NIO模型:轮训调用recvfrom。
  • I/O复用:linux提供select/poll,其支持多个fd的NIO,但是select/poll本身是阻塞的。epoll采用事件驱动的方式代替顺序扫描,其性能更高。
  • 信号驱动I/O模型:
  • 异步I/O:通知内核某个操作,并整个操作完成的时候通知我们。

# I/O多路复用技术

epoll优点:

  • 支持一个进程打开的fd不受限制
  • IO效率不会随着fd数量增加而下降
  • 使用mmap加速内核和用户空间的消息传递
  • epoll API更加简单

# 1.2 Java的IO演进

2011年JDK7发布:

  • 提供了能批量获取文件属性的API
  • 提供AIO功能

# 2.1 传统的BIO编程

CLient/Server模型中,Server负责绑定IP,启动监听端口;Client发起链接请求,经过三次握手建立连接,通过输入输出流进行同步阻塞式通信。

# 2.1.1 BIO通信模型图

通过Acceptor处理多个client连接请求,处理完成后销毁线程。 该模型的问题就是支持的线程数量有限。

# 2.2 伪异步IO模型

伪异步是为了解决BIO一个链路需要一个线程的问题。 通过一个线程池处理多个客户端的请求接入

  • 线程的数量不会大量膨胀导致资源耗尽
  • 问题是:没有解决同步IO导致的线程阻塞问题

# 2.3 NIO模型

# 2.3.1 NIO简介

缓冲区buf 本质是一个字节数组(ByteBuff),同时提供数据的结构化访问以及维护读写位置。

通道 channel channel是全双工的。 流是单向的。 多路复用 selector selector简单来说就是轮训注册在其上的channel,

# 2.3.2 NIO服务序列图

# 2.4 AIO

编辑 (opens new window)
上次更新: 2022/05/22, 00:01:01
TCP粘包拆包问题的解决之道

TCP粘包拆包问题的解决之道→

最近更新
01
电商-商品系统设计
12-17
02
关于如何写OKR
12-09
03
对事不对人 vs 对人不对事
12-09
更多文章>
Theme by Vdoing | Copyright © 2022-2023 YoungAnnn | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式