Netty的实现图解

Netty基础概念

1.epoll函数

NIO中实现多路复⽤的核⼼类是Selector,当多路复⽤器Selector调⽤select⽅法时,将会查找发⽣事件的channel,问题是,该如何在多个注册到selector上的channel中找到哪些channel发⽣了事件,此时NIO不同的版本有不同的做法。

select(早期版本)poll(1.4)epoll(1.5及以后)
操作方式遍历遍历回调
底层实现数组链表哈希表
IO效率线性遍历数组中所有的channel,性能较差线性遍历链表中所有的channel,性能较差由操作系统将发生事件的channel存入到服务端的就绪事件列表中,selector直接从就绪事件列表中获得发生事件的channel,而不需要遍历所有的channel
最大连接有上限无上限无上限

2.Reactor模型

不同的线程模型决定了程序的性能。在IO线程模型领域,并发编程之⽗Doug Lea提出了Reactor模型。Netty的线程模型就是基于Reactor模型设计的。

  • 传统的阻塞IO模型

    传统的BIO模型中,服务端的⼀条线程必须处理完⼀个客户端的所有请求后才能处理另⼀个客户端的请求。

  • 基于事件响应式的基础Reactor模型

    基础版本的Reactor模型,由单线程逐⼀处理来⾃于多个客户端的不同事件,⽽不需要等待某⼀个客户端的请求全部执⾏完才能处理另⼀个客户端的请求。

  • 提升业务处理能力的Reactor模型

    在基础Reactor模型中,Reactor在处理某⼀个客户端的读请求时,其他请求依然需要阻塞等待,如何提升这⼀块的并发性呢,就可以使⽤线程池来提升处理某⼀个具体业务的并发操作。

  • 多主多从的Reactor模型

    如果只把业务处理模块交由多线程来解决,但是在实际场景中,有可能会⾯临成千上万客户端的连接,⽽这些客户端的连接请求只能等待Reactor完成业务处理后才能被处理。此时创建⼀个独⽴的Reactor专⻔负责处理客户端的连接请求,⽽且这样的Reactor也可以⽀持多线程,那么就能解决海量客户端连接的应⽤场景。

3.Netty线程模型

基于Reactor模型的Netty线程模型

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值