Reactor线程模型
一 传统阻塞线程模型
第一:服务器端有一个Acceptor线程接收客户端请求
第二:Acceptor接收到每一个客户端请求后,为每一个线程分配一个线程处理客户端请求
缺点:
第一:当数据量很大或者客户端很多的时候,就会创建大量的线程对象
第二:连接建立后,没有数据可读,会一直处于阻塞状态
二 Reactor单线程模型
第一:Reactor对象通过Selector(多路复用器)监控客户端请求事件
第二: 收到事件后,进行分发
第三:如果是建立连接的事件则交给Acceptor,通过accept处理连接请求,然后创建一个Handler对象处理连接完成后的后续业务处理;如果不是建立连接则直接调用Handler来处理
缺点:
单个线程要负责连接、读写请求,如果客户端连接数量太多,则会无法发挥CPU多核的性能,容易造成性能瓶颈
三 Reactor多线程模型
第一:Reactor线程通过Selector多路复用器监听客户端事件
第二:收到事件后,进行转发
第三:如果是建立连接的请求,则通过Acceptor线程的accept处理连接,然后创建一个Handler对象处理后续的请求;如果不是连接请求则由Reactor分发,调用Handler来处理
第四:Handler不会自己处理具体的读写请求,而是直接提交给一个线程池去执行,然后就可以返回了,然后由线程池获取一个线程执行这个请求
优点:
可以充分利用多核CPU处理能力
缺点:
Reactor要处理所有的事件监听和响应,是单线程运行,并发量大的时候,容易出现性能瓶颈
四 主从Reactor多线程模型
第一:MainReactor通过通过多路复用器,监听客户端连接请求,然后调用Acceptor的accept处理连接请求
第二:Acceptor处理连接事件,然后Main Reactor将连接分配给SubReactor
第三:SubReactor将连接加入到连接队列并监听,然后创建Handler处理各种事件
第四:Handler不处理具体的业务逻辑,而是将请求或者事件提交给线程池去处理
第五:线程池分配线程处理业务逻辑,并返回结果
Reactor线程模型相关推荐
- reactor线程模型_简单了解Java Netty Reactor三种线程模型
1. Reactor三种线程模型 1.1. 单线程模型 Reactor单线程模型,指的是所有的IO操作都在同一个NIO线程上面完成,NIO线程的职责如下: 1)作为NIO服务端,接收客户端的TCP连接 ...
- Netty Reactor线程模型与EventLoop详解
本文来说下Netty Reactor线程模型与EventLoop 文章目录 EventLoop事件循环 任务调度 线程管理 线程分配 非阻塞传输 阻塞传输 Netty线程模型 单Reactor单线程模 ...
- reactor线程模型_面试一文搞定JAVA的网络IO模型
1,最原始的BIO模型 该模型的整体思路是有一个独立的Acceptor线程负责监听客户端的链接,它接收到客户端链接请求之后为每个客户端创建一个新的线程进行链路处理,处理完成之后,通过输出流返回应答给客 ...
- Linux 的 IO 通信 以及 Reactor 线程模型浅析
目录 随着计算机硬件性能不断提高,服务器 CPU 的核数越来越越多,为了充分利用多核 CPU 的处理能力,提升系统的处理效率和并发性能,多线程并发编程越来越显得重要.无论是 C++ 还是 Java 编 ...
- 浅谈Reactor 线程模型
Reactor 的线程模型有三种:单线程模型.多线程模型.主从多线程模型.首先来看一下单线程模型,如下图所示: 所谓单线程, 即Acceptor 处理和andler 处理都在同一个线程中处理.这个模型 ...
- netty reactor线程模型分析
netty4线程模型 ServerBootstrap http示例 // Configure the server.EventLoopGroup bossGroup = new EpollEventL ...
- reactor线程模型_从TCP服务器到I/O模型,带你学习Netty
学习Netty就不得不从TCP服务器和I/O模型说起,了解TCP服务器架构和I/O模型的演进有助于深入了解Netty. TCP服务器的架构 一般地,TCP服务器有两种套接字,监听套接字和已连接套接字. ...
- Netty之线程模型
Reactor 线程模型: Reactor 是反应堆的意思,Reactor 模型是指通过一个或多个输入同时传递给服务处理器的服务请求的事件驱动处理模式.服务端程序处理传入多路请求,并将它们同步分派给请 ...
- netty应用场景_彻底搞懂 netty 线程模型
编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等.本文就netty线程模型展开 ...
最新文章
- linux如何查看内存最大的几个文件,详解Linux如何查看当前占用CPU或内存最多的几个进程...
- 【微信小程序之画布】终:手指触摸画板实现
- 郑州大学采用计算机,郑州大学计算机系作业
- Java常见面试题及答案汇总
- JavaWeb课程复习资料——中文乱码上下文处理
- CSS连载-控制背景与CSS精灵
- 中式国风地产创意海报素材模板
- JVM-class文件完全解析-字段表集合
- FTP、WEB虚拟目录作用
- 遇到暴风影音 activeX 漏洞
- 必读的android 文章- 收藏集 - 掘金
- 2020考研分数线计算机专业,2020考研分数线如何划定
- 网络远程计算机终止,电脑拨号上网出现错误629:连接被远程计算机终止怎么办...
- HDS USP系列存储
- 使用GAN生成序列数据
- MATLAB图像处理-图像增强之彩色图像直方图均衡化(RGB通道和HSV通道两种)
- 基于MXL90614设计温度传感器
- 【taro +vue】初体验
- 原始socket实现局域网ARP欺骗
- myeclipse编译无效,debug下一步执行不正确,修改的代码没有起作用
热门文章
- 是介于小型机和微型计算机,第一章计算机基础解析.ppt
- 面试被问mysql扩展性设计相关的点,你知道该如何回答吗
- Golang 二叉树系列【二叉树深度】
- 关于容量设计、规划、治理 你知多少?
- linux系统while循环,linux命令:while循环(示例代码)
- python showinfo 方法_Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
- 可变悬挂调节软硬_国六最亲民的豪车,丐版2.0T纯进口,全系可变悬架+8气囊,才23万...
- python使用joblib多进程执行for循环
- pandas 自定义groupby的函数
- 软件测试缺陷定义和管理