2021SC@SDUSC
个人认为要先从认识netty入手,再开始核心代码的研究。那么了解到netty和基础核心是NIO框架,所以先从NIO入手开始学习。
NIO介绍
NIO是一种同步非阻塞的网络编程模型,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求就进行处理。 那么理解NIO需要懂得概念有这些
IO模型
IO 模型实际上就是描述了计算机世界中的输入和输出过程的模式。通俗的说,我们用键盘写文章到计算机就是输入,键盘也就是输入设备,计算机从磁盘或者内存里取出数据到显示器给你看就是输出,显示器也就是输出设备。
同步非阻塞
什么又是同步非阻塞呢? 一要懂同步,二要懂非阻塞 同步,异步,是指两个线程之间的关系,如果线程A对线程B发起请求,A要一直到等B的结果返回了才能继续往下运行,A和B就是同步关系。 阻塞,非阻塞,是指单个线程的状态,如果线程A对线程B发起请求,如果A线程不用等B的结果,直接干别的去了,那么就是非阻塞状态。 同步非阻塞,好处就是可以一个线程处理多个IO操作,这么说可能不好理解,简单说举个经典例子区分: 1 老张把水壶放到火上,立等水开。(同步阻塞) 2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞) 3 老张把水开了就会响的水壶放到火上,立等水开。(异步阻塞) 4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。
NIO简单示意图
NIO核心介绍
NIO的三大核心Selector、Channel 和 Buffer
三大核心关系的简单描述:
Selector 对应一个线程,一个线程对应多个 Channel(连接)。 每个 Channel 都会对应一个 Buffer。
三大组件简单介绍
缓冲区(Buffer)
缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组)
通道(Channel)
NIO 的通道类似于流,但有些区别如下: 通道可以同时进行读写,而流只能读或者只能写 通道可以实现异步读写数据 通道可以从缓冲读数据,也可以写数据到缓冲:
Selector(选择器)
Selector 能够检测多个注册的通道上是否有事件发生(注意:多个 Channel 以事件的方式可以注册到同一个 Selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求。 //详细内容下次分析
|