Netty系列(一)

目录

I/O 模型

BIO:同步并阻塞

NIO:同步非阻塞

 NIO 三大核心

SelectionKey:

ServerSocketChannel:

SocketChannel:

 NIO 与零拷贝

AIO:异步非阻塞 

BIO、NIO、AIO 对比表


I/O 模型

Java 共支持 3 种网络编程模型/IO 模式:BIO、NIO、AIO

BIO:同步并阻塞

一个客户端一个线程

NIO:同步非阻塞

一个线程对应多个客户端

 NIO 三大核心

Channel(通道),Buffer(缓冲区), Selector(选择器)

  论数据结构的重要性,把概念细分出来就是数组,数据通过buffer缓冲区数组变量进行存储转发,因此NIO可以说是以块的方式处理数据,而BIO则是基于字节流和字符流进行操作,因此BIO 以流的方式处理数据。

NIO 非阻塞 网络编程原理分析图 

        NIO 非阻塞 网络编程相关的(Selector、SelectionKey、ServerScoketChannel 和 SocketChannel) 关系梳理图。

对上图的说明:
1) 当客户端连接时,会通过 ServerSocketChannel 得到 SocketChannel
2) Selector 进行监听 select 方法, 返回有事件发生的通道的个数.尚硅谷 Netty 核心技术及源码剖析
更多 Java –大数据 –前端 –python人工智能 -区块链资料下载,可访问百度:尚硅谷官网 第 39页
3) 将 socketChannel 注册到 Selector 上, register(Selector sel, int ops), 一个 selector 上可以注册多个 SocketChannel
4) 注册后返回一个 SelectionKey, 会和该 Selector 关联(集合)
5) 进一步得到各个 SelectionKey (有事件发生)
6) 在通过 SelectionKey 反向获取 SocketChannel , 方法 channel()
7) 可以通过 得到的 channel , 完成业务处理
 

几个主要的类

SelectionKey:

示 Selector 和网络通道的注册关系

ServerSocketChannel:

在服务器端监听新的客户端 Socket 连接。

SocketChannel:

网络 IO 通道,具体负责进行读写操作。NIO 把缓冲区的数据写入通道,或者把通道里的数据读到缓冲区。

 NIO 与零拷贝

 1) 零拷贝是网络编程的关键,很多性能优化都离不开。

 2) 在 Java 程序中,常用的零拷贝有 mmap(内存映射) 和 sendFile。

传统 IO 模型

DMA: direct memory access 直接内存拷贝(不使用 CPU)

mmap 通过内存映射,将文件映射到内核缓冲区,同时,用户空间可以共享内核空间的数据。

sendFile:数据根本不经过用户态,直接从内核缓冲区进入到Socket Buffer,同时,由于和用户态完全无关,就减少了一次上下文切换。Linux 在 2.4 版本中,做了一些修改,避免了从内核缓冲区拷贝到 Socket buffer 的操作,直接拷贝到协议栈,从而再一次减少了数据拷贝。

2) NIO 是 面向缓冲区 ,或者面向 块 编程的。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性,使用它可以提供非阻塞式的高伸缩性网络

AIO:异步非阻塞 

1) JDK 7 引入了 Asynchronous I/O,即 AIO。在进行 I/O 编程中,常用到两种模式:Reactor 和 Proactor。Java 的NIO 就是 Reactor,当有事件触发时,服务器端得到通知,进行相应的处理。
2) AIO 即 NIO2.0,叫做异步不阻塞的 IO。AIO 引入异步通道的概念,采用了 Proactor 模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。 

BIO、NIO、AIO 对比表

--------------------------

资料来源于尚硅谷,推荐大家去尚硅谷学习,蛮多免费分享的视频资料,可以先视频学习一下思想,然后再去看源码 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值