Netty的线程IO模型

Netty是一个通信框架,致力于实现在不同机器上的线程通信,底层是用线程的NIO模型实现的,靠事件驱动。Netty的一个特点就是异步非阻塞IO,简称异步NIO(non-blocking IO),正因为Netty的异步NIO实现很可靠,促成了Netty在软件开发特别是分布式应用中的风靡。
那什么是异步非阻塞IO呢?这要从线程的IO模型说起。

异步阻塞IO
我们都知道,在两台不同机器上的两个线程如果要通信,就必须调用网络相关的接口,而网络IO接口就是其中之一,IO接口有不同的实现方式,大致可以分为4种:同步阻塞IO(BIO)、伪异步阻塞IO(PIO)、异步阻塞IO(NIO,虽然叫non-blockin,但实际上是阻塞的)、真正的异步非阻塞IO(AIO)。
其中BIO、NIO的IO与工作线程之间的关系如下:
BIO:1连接:1线程
NIO:1条有效连接:1线程,或者说 全部连接:1个线程。

这里的有效连接是指连接中含有请求数据,而且处理连接的线程只有一个,因为在一个连接创建后,该连接(对应下图的Channel)会被注册到多路复用器Selector上。当这个Selector注册了多个连接后,它会需要监控哪个连接中当前有数据,然后就通知线程处理,此时线程与连接是一对一的。
有的观点认为NIO是异步非阻塞的,这里的非阻塞侧重在Selector对连接的调度上,因为Selector可以自主选择有数据的连接提交给工作线程,只要发现有效连接就提交给线程。而当有多个有效连接时就得"排队"了,这时候就是阻塞,即阻塞侧重在线程的处理上。因此,严格意义上来说,将NIO归类为阻塞更合适。
​​​​在这里插入图片描述
很显然,NIO比BIO节省了线程开销。

欢迎大家关注我的公众号——日更的小易
在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小谢backup

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值