Netty:Reactor模型

导读:在Neyyu权威指南2 ”Netty服务端创建“这一章节开头中,有这么一个前提条件,“概述是想要深入到学习Netty原理,通过阅读源码是最有效的方式之一。那么阅读源码,需要了解一定的基础是必要的。同时Reactor模式,是高性能网络编程的必知必会模式。

Netty服务端的创建需要必备: 1)熟悉JavaNIO主要类与库的使用 ;2)熟悉JDK的多线程便车给你; 3)了解Reactor模式”。针对于1和2,在学习java基础的时候必然已经学过,那么对于Reactor模式又是什么,通过以下的文章可以进一步了解到什么是Reactor模式,且Netty是如何使用Reactor模式的。

1.什么是Reactor(反应器设计)模式

Reactor模式 是一种「事件驱动」模式。
「Reactor线程模型」就是通过 单个线程 使用Java NIO包中的Selector的select()方法,进行监听。当获取到事件(如accept、read等)后,就会分配(dispatch)事件进行相应的事件处理(handle)。
如果要给 Reactor线程模型 下一个更明确的定义,应该是:
Reactor线程模式 = Reactor(I/O多路复用)+ 线程池
其中Reactor负责监听和分配事件,线程池负责处理事件。

2.Reactor模式种定义的角色

Reactor模型中定义的三种角色:
Reactor:负责监听和分配事件,将I/O事件分派给对应的Handler。新的事件包含连接建立就绪、读就绪、写就绪等。
Acceptor:处理客户端新连接,并分派请求到处理器链中。
Handler:将自身与事件绑定,执行非阻塞读/写任务,完成channel的读入,完成处理业务逻辑后,负责将结果写出channel。可用资源池来管理。

3.多线程IO的致命缺陷

最开始的网络编程的原理就是服务器用一个while循环,while循环不断监听是否有套接字进行连接,调用如下类似的函数进行处理

while(true){
   
socket = accept();
handle(socket)
}

这种方法的最大问题是无法并发,效率太低,如果当前的请求没有处理完,那么后面的请求只能被阻塞,服务器的吞吐量太低。
之后,想到了使用多线程,也就是很经典的connection per thread,每一个连接用一个线程处理,类似:

package com.crazymakercircle.iodemo.base;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值