Netty(一) Reactor 线程模型

什么是Reactor模型

Reactor模式含义为反应堆模式,专门用于处理请求的模式,它基于IO多路复用和事件驱动。
通过1个或多个线程接收请求,然后将请求转发至其他工作线程进行业务处理。Reactor模式适用于高并发场景,替代传统的多线程模式,提升系统的资源,提升吞吐量;

传统阻塞IO线程模型的缺点

  1. 每个连接都专门创建一个线程处理,当连接数较多,则线程较多,资源占有大
  2. 基于阻塞IO模型,连接建立后,若当前连接没有数据可读,则线程会阻塞在读操作上,浪费了线程使用

Reactor线程模型解决的问题

  • 基于线程池化技术,管理线程,避免为每个连接都创建线程,节省了资源
  • 基于IO复用模型,多个连接基于一个阻塞对象,不用等待所有的连接。遍历到有新数据可以处理时,操作系统会通知程序,线程跳出阻塞状态,进行业务逻辑处理

Reactor模型中的各个角色

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

处理并发请求的技术历史

单线程处理
一个线程处理请求,后续请求排队阻塞,等前一个请求处理完才能处理后续请求连接

1个连接,1个线程
每来一个连接,就分配一个线程用于处理这个连接。由于资源限制,且频繁创建线程的消耗,引入了线程池对线程资源做管理;当线程池的线程资源用尽后,后续连接也只能阻塞等待

Reactor模式
事件驱动、多路复用的模式,处理并发连接请求

多路复用和事件驱动

多路复用指的是,通过使用1个或者几个线程,处理多个TCP连接;
事件驱动是指,将感兴趣的事件注册的到Reactor上,当发生事件后,对连接进行处理

阻塞IO:1个线程对应1个IO,阻塞等待至数据到来
非阻塞IO:1个线程对应1个IO,不断的检查是否有数据,没有则返回null
select、poll:1个线程轮询所有的IO,轮询到IO动作则返回处理,实际底层是轮询文件描述符;多路复用体现在1个线程处理多个IO,时间复杂度 O(n)
epoll:将感兴趣的IO动作注册至epoll上,当发生IO动作后则通知发生IO的文件描述符和动作类型,不需要轮询;时间复杂度O(1);也就是事件驱动

Reactor 单线程模型

一个NIO线程处理所有连接的IO动作,并将连接转发至工作线程

相当于餐厅中只有1个人同时处理前台服务、下单、端菜、收钱等工作。
在这里插入图片描述

Reactor 多线程模型

多线程模型是由1个NIO线程专门处理连接,由1组线程处理IO动作并转发给工作线程

在这里插入图片描述

Reactor 主从多线程模型

多线程模型的缺点是,并发连接特别多的情况下,1个NIO线程难以支撑大量并发连接。就像1个前台,无法应对大量的服务员。

主从多线程模型是1组NIO线程处理连接,1组NIO线程处理IO动作并转发给工作线程
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Netty的多线程模型与主从多线程模型有一些区别。Netty线程模型基于主从多Reactor模型,其中一个线程负责处理OP_ACCEPT事件,而拥有CPU核数的两倍的IO线程负责处理读写事件。一个通道的IO操作会绑定在一个IO线程中,而一个IO线程可以注册多个通道。在一个IO线程中,所有通道的事件是串行处理的。\[1\] 相比之下,主从多线程模型中,一个线程负责监听客户端请求,而多个线程负责事件处理和转发,还有多个线程负责逻辑处理。每个客户端都分配独立的线程,该线程负责全部的工作,包括监听、读取、处理和响应。而在Netty的多线程模型中,一个IO线程可以处理多个通道的IO操作。\[2\] 此外,Netty的多线程模型还可以通过指定其他线程池来处理编码、解码等操作,以及单独开启业务线程池来处理业务逻辑。这样可以避免线程切换,提高性能。而主从多线程模型中,所有的功能都在子线程中进行处理。\[2\] 总的来说,Netty的多线程模型相对于主从多线程模型更加灵活和高效,能够更好地处理并发请求。 #### 引用[.reference_title] - *1* *3* [【9. Netty Reactor模型之主从多线程模型】](https://blog.csdn.net/W664160450/article/details/123418237)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [面试官:Netty线程模型可不只是主从多Reactor这么简单](https://blog.csdn.net/prestigeding/article/details/112405349)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值