Netty学习2

Netty 模型

上一篇讲解了Netty入门,以及一些Reactor模型及基础知识点.
涉及到了传统I/O模型;	I/O复用;	线程池模型;
以及最后的Reactor 模型;

我们复习一下上一篇讲解的

首先是传统I/O模型:
	它有阻塞,每个连接单独一条线程的优点;
第二是 I/O 复用:
	它的话是一个线程监听端口号.等待连接.
	之后将连接的请求,分达到具体的业务处理逻辑之中.
	内里逻辑是有read,handle,write方法的.其中read和handler是阻塞.
	因为handle是逻辑,业务处理.但是必须要等待数据的来临,所以是阻塞的.
第三是线程池模型:
	基于事件驱动的模型.接受连接,请求.
	之后在将请求分发给线程池中的线程.
	这样的话每条线程可处理多条请求.
最后是Reactor模型:这是Netty应用的模型.但也有三种

三种Reactor模型

单线程Reactor模型
多线程Reactor模型
Netty模型:
主从Reactor多线程模型(多Reactor,多线程模型:个人理解)

Netty复杂完整模型

单Reactor单线程模式

请+公众号:进击的星星
之前的NIO群聊,就是Reactor单线程模型的经典案例. 这里的NIO群聊的代码就不贴出来了.因为还有BUG,,,,,不太好意思害人,也不好啥意思发出来人读者帮忙调BUG

图中的Reactor,类似NIO群聊中的ServerSocket.接收所有的请求
Reactor有select()方法.进行dispatch
	Acceptor:接收器
如果是连接请求,就调用Accpetor(接收器)执行accpet操作
处理请求
	Handler
	中有read,业务处理,以及send操作.
在NIO系统中我们并没有书写read,send,以及业务处理的方法.
是因为我们判断了此Socket的状态.是否连接,是否可读.
我们分为:
	readData()
	sendInfo
	以及启动ServerSocket的方法
	但是我们的 读,写,handler ,listen是在一个线程中.
	当遇到高并发时,会出现问题.一个线程会阻塞.

单Reactor 多线程

Reactor多线程模型
相比上面, 多线程模型多了个线程池. 除了等待连接这一部分.其他read,handler都是线程池中的线程在处理.

Reactor对象通过select 监控客户端请求事件.收到事件后,通过dispatch进行分发

如果是建立连接请求, 则由 Acceptor(接收器)处理连接请求. 然后创建一个Handler对象.处理连接后的各种事件:
	客户端和服务器建立了连接.

如果不是建立连接的请求(已经建立了连接),则有reactor分发调用连接对应的Handler来处理请求:
	已经建立了连接,那么请求由根据这个连接创建出来的Handler对象处理请求
Handler:
	只负责响应事件.读取数据,写出数据. 具体的数据处理由线程池中的线程进行处理.

Handler的作用
其实也很好理解.但如果我们加上CPU呢.也就是线程对CPU的占用.如果阻塞呢.所以我们的具体业务是线程来处理.而Accpector(连接器)还是会继续监听连接.生成对应的Handler.

优点
充分利用多核CPU的能力
缺点
多线程数据共享,访问比较复杂.	Reactor单线程,高并发场景容易出现新性能问题和瓶颈

主从Reactor多线程

主从Reactor多线程模型
主Reactor
主Reactor

MainReactor:用于监听客户端建立连接的事件. 涉及到业务处理

子Reactor:SubReactor
子Reactor

业务的分派:拥有自己的select和dispacth.	
一个子线程Reactor可以监听多个Client..如果有事件,分配给不同的Handler处理

分配:SubReactor

一个主Reactor对应多个SubReactor.
将IO读取分配给SubReactor,业务操作分配给worker.三级模式

说明

Reactor主线程:MainReactor对象通过select监听链接事件.
收到事件后,通过Acceptor(链接器)处理连接事件.
处理连接事件后,MainReactor将连接分配给SubReactor.
SubReactor 将连接加入到连接队列进行监听.
	同时创建Handler对象.等待进行各种事件处理
	当有新事件发生时,SubReactor调用对应的Handler进行处理.
	Handler通过read读取数据.分发给worker线程处理.
	worker分配独立的worker线程进行业务的处理,,并返回结果.
	Handler 将结果send到Client

个人画的.不太清楚
主Reactor 对应多个 SubReactor

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值