Netty前身基础NIO介绍理解2021SC@SDUSC

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核心介绍

NIO的三大核心Selector、Channel 和 Buffer

三大核心关系的简单描述:

NIO三大核心关系
Selector 对应一个线程,一个线程对应多个 Channel(连接)。
每个 Channel 都会对应一个 Buffer。

三大组件简单介绍

缓冲区(Buffer)

缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组)

通道(Channel)

NIO 的通道类似于流,但有些区别如下:
通道可以同时进行读写,而流只能读或者只能写
通道可以实现异步读写数据
通道可以从缓冲读数据,也可以写数据到缓冲:

Selector(选择器)

Selector 能够检测多个注册的通道上是否有事件发生(注意:多个 Channel 以事件的方式可以注册到同一个 Selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以只用一个单线程去管理多个通道,也就是管理多个连接和请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值