NIO模型
2021-09-08 16:07:01 15 举报
NIO三大核心组件介绍及其之间的关系
作者其他创作
大纲/内容
Thread
Channel
Buffer
Server
Client
选择一个空闲的线程
NIO模型
NIO三大组件: Channel、Buffer、Selector1.Channel:通道,类似流,但是有些区别如下 (1)通道可以同时进行读写,而流只能读或者只能写 (2)通道可以实现异步读写数据 (3)通道可以从缓冲读取数据,也可以写数据到缓冲2.Selector:选择器 (1)Java 的 NIO,用非阻塞的 IO 方式,可以用一个线程,处理多个的客户端连接,就会使用到 Selector (选择器) (2)Selector 能够检测多个注册的通道上是否有事件发生(多个 Channel 以事件的方式可以注册到同一个 Selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个单线程去管理多个通过,也就是管理多个连接和请求 (3)只有在连接真正有读写事件发生时,才会进行读写,就大大地减少了系统的开销,并且不必为每个连接都创建一个线程,不用去维护多个线程 (4)避免了多线程之间的上下文切换导致的开销3.Buffer:缓冲区本质上是一个可以读写数据的内存块,Channel 提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由 BufferNIO三大组件之间的关系: (1)每个 Channel 都会对应一个 Buffer (2)Selector 对应一个线程,一个线程对应多个 Channel(可以理解为连接) (3)该图反映了有三个 Channel 注册到该 Selector (4)程序切换到哪个 Channel 是由事件决定的,Event 就是一个重要的概念 (5)Selector 会根据不同的事件,在各个通道上切换 (6)Buffer 就是一个内存块,底层有一个数组 (7)数据的读取写入是通过 Buffer,这个和 BIO 有所不同。BIO 中要么是输入流,或者是输出流(不能双向)。但是 NIO 的 Buffer 是可以读也可以写的,需要 flip 方法切换 (8)Channel 是双向的,可以反映底层操作系统的情况,比如 Linux,底层的操作系统通道就是双向的
Selector
0 条评论
回复 删除
下一页