什么是Netty、Reactor线程模型和nio

Netty是提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端的编程框架。

例如:dubbo的底层通信是利用netty来实现的。

Reactor是一种线程模式,Reactor是什么?
The reactor design_pattern is an event_handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs. The service handler then demultiplexes the incoming requests and dispatches them synchronously to the associated request handlers.
from wiki

通过wiki中的定义我们可以发现Reactor的重点

  1. 事件驱动
  2. 可以处理一个或多个输入源
  3. 通过多路复用将请求的事件分发给对应的处理器处理

根据大神Doug Lea 在 《Scalable IO in Java 》中的介绍,Reacotr模型主要分为三个角色

  1. Reactor:把IO事件分配给对应的handler处理
  2. Acceptor:处理客户端连接事件
  3. Handler:处理非阻塞的任务

例如Redis中就是使用到了IO多路复用的机制,由于其内部是单线程处理的,所以对应的是单线程的Reactor模式。因为Redis中的命令通常很简短,所以不容易产生阻塞的情况,并且由于单线程减少了线程间上下文切换的消耗,大大提高了效率。

Netty中是实现是建立在JDK中NIO的实现之上的。对于传统JDK nio优化了ByteBuffer,内部实现了ByteBuf。

NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。

NIO和传统IO(一下简称IO)之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 

 

总结
O多路复用使用了NIO模型
Reactor模式使用了IO多路复用的机制
Redis使用了Reactor模式
Netty优化了Java的NIO并且使用了类似Reactor的模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值