Reactor模式

news2024/10/6 16:23:56

Reactor是一种设计模式,可以用于构建高并发的网络服务器。
Reactor模式的好处在于:可以在一个或多个reactor线程使用多路复用技术去管理所有网络连接连接建立、IO请求,保证工作线程不被IO阻塞。
前置知识:IO多路复用技术

1. 传统网络线程模型

在这里插入图片描述
如图所示,传统网络线程模型在每个客户端连接建立完成之后,会为这个客户端连接船舰一个新的线程去处理IO请求,以及进行计算。这种模式实际上对应了我们之前说过的BIO,也就是说,每个线程在客户端数据准备阶段都是被阻塞的,虽然这段时间线程什么都不需要干,但是它却无法脱身。

这样的网络模型既浪费线程资源,又受制于线程数量。

2. Reactor模型

reactor模型实际上就是对前文提到的epoll机制的封装。我们使用reactor线程去处理客户端的连接、IO事件;使工作线程从IO中抽身,只专注于事件的处理。Reactor线程会遍历所有客户端连接,一旦发现其中数据准备完毕,便会将事件分发给工作线程,由工作线程完成后续处理。

根据Reactor线程数量,Reactor模型可以被分为三种:单Reactor单线程、单Reactor多线程、主从Reactor。

2.1 单Reactor单线程

在这里插入图片描述
在这个模式中,只有一个Reactor线程,Reactor既要处理客户端连接,又要进行处理IO,在得知某些连接的IO准备完毕之后,Reactor线程还需要对对应的事件进行处理。

2.2 单Reactor多线程

在上面的单Reactor单线程模型中,Reactor确实可以使用epoll机制监听多个连接,但是对于业务处理,它还是需要串行处理的;如果业务处理很耗时,或者业务量比较大,单Reactor单线程模型就力不从心了。

解决办法页很简单,Reactor线程仅仅处理客户端的连接建立、IO操作。当监测到某些连接的数据就绪时,将业务处理交给一个多线程线程池去处理。
在这里插入图片描述

2.3 多Reactor多线程模型

当客户端连接很多,单个Reactor线程无法应对所有连接的建立、IO操作时,我们使用计算机领域的经典思想:负载均衡。我们使用多个Reactor线程去处理IO操作,将Reactor线程分为一个MainReactor和多个SubReactor。MainReactor负责接收客户端请求,然后acceptor将客户端的连接负载均衡配分到多个SubReactor上,每个SubReactor只需要处理被分配到的客户端连接的读写请求。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403886.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何通过外贸网站SEO优化,提升您的品牌曝光度和海外业务销售额?

随着全球化的不断推进和互联网的普及,越来越多的外贸企业开始重视SEO优化,以提升自身品牌的曝光度和海外业务的销售额。 但是,对于许多外贸企业而言,SEO优化似乎是一个非常陌生的领域,他们并不清楚该如何进行优化。 …

两会特稿 | 项国就书法学术论文入编《中国民族博览》国家一级大型文化类期刊

2022 年 7 月,著名书法家项国就撰写的书法学术论文《探究〈散氏盘〉与其临创感悟》入编国家一级大型文化类期刊《中国民族博览》,并于 2023 年 1 月正式出刊发表。 据悉,《散氏盘》是我国最重要的书法艺术形式之一,研究《散氏盘…

并发编程之AtomicUnsafe

目录 原子操作 定义 术语 处理器如何实现原子操作 处理器自动保证基本内存操作的原子性 使用总线锁保证原子性 使用缓存锁保证原子性 Java当中如何实现原子操作 Atomic 定义 原子更新基本类型类 原子更新数组类 原子更新引用类型 原子更新字段类 Unsafe应用解析…

【MySQL】MySQL的锁机制

目录 概述 MyISAM 表锁 InnoDB行锁 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)。 在数据库中,除传统的 计算资源(如 CPU、RAM、I/O 等)的争用以外,数据也是一种供许多用户共…

中断以及 PIC可编程中断控制器

1 中断分为同步中断(中断)和异步中断(异常) 1.1 中断和异常的不同 中断由IO设备和定时器产生,用户的一次按键会引起中断。异步。 异常一般由程序错误产生或者由内核必须处理的异常条件产生。同步。缺页异常&#xff…

【Linux】关机、重启和用户登录注销

目录1 关机&重启命令1.1 基本介绍1.2 注意细节2 用户登录和注销2.1 基本介绍2.2 使用细节1 关机&重启命令 1.1 基本介绍 shutdown -h now          立刻关机shutdown -h 1            “hello,1分钟后会关机了”shutdown -r now   …

【hadoop】介绍

目录 介绍 版本 优势 大数据技术生态体系 介绍 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 解决 存储和分析计算Google在大数据方面的三篇论文GFS --->HDFS Map-Reduce --->MR BigTable --->HBaseHadoop创始人Doug Cutting版本 Hadoop 三大发行版本&a…

一文带你了解MySQL的Explain

日常工作中,我们经常会收到慢sql告警,前面也写过两篇优化文章,SQL的优化思路和使用规范_出世&入世的博客-CSDN博客 MySQL优化策略_出世&入世的博客-CSDN博客 在优化这些慢sql时,我们经常需要用到explain这个命令来查看…

aws dynamodb java低等级api和高级客户端api的使用

参考资料 https://docs.amazonaws.cn/zh_cn/sdk-for-java/latest/developer-guide/setup-project-maven.html 初始化环境 创建maven项目 mvn org.apache.maven.plugins:maven-archetype-plugin:3.1.2:generate \-DarchetypeArtifactId"maven-archetype-quickstart&quo…

正则表达式引擎NFA自动机的回溯解决方案总结

前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。 我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法&#…

【C语言】每日刷题 —— 牛客语法篇(4)

🚀🚀前言 大家好,继续更新专栏 c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解。 🏡个人主页&am…

Mr. Cappuccino的第48杯咖啡——冒泡APP(升级版)之基于Docker部署企业级Maven私服

冒泡APP(升级版)之基于Docker部署企业级Maven私服基于Docker安装Nexus登录Maven私服配置Maven仓库配置settings.xml和pom.xml项目实践及常见问题基于Docker安装Nexus 查看sonatype/nexus镜像版本 下载指定版本的镜像 docker pull sonatype/nexus3:3.48…

【C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)

C语音经典题型1. 在屏幕上输出9*9乘法口诀表2. 求10 个整数中最大值3. 计算1/1-1/21/3-1/41/5 …… 1/99 - 1/100 的值,打印出结果4. 编写程序数一下 1到 100 的所有整数中出现多少个数字95. 能把函数处理结果的二个数据返回给主调函数6. 实现一个函数,…

Https 笔记

HTTP TLS TLS 的前身是 SSL 非对称加密的核心: 两个密钥(公私) https 需要第三方CA(证书授权中心)申请SSL证书以确定其真实性 证书种包含了特定的公钥和私钥 密钥交换 自己将私钥上锁后发给对方对方也上锁 在还回来…

【2023包河区】题解

今天早上也是打完了包河区,不得不说是太 了 所以说,还是水一篇文章吧 T1 签到题 超级简单题吧,用max_score和max_name来计最大的名字和分数。 int n;scanf("%d",&n); int score,max_score; string name,max_name;对于一个新…

Windows修改Docker安装目录修改Docker镜像目录,镜像默认存储位置存放到其它盘

Windows安装Docker,默认是安装在C盘,下载镜像后会占用大量空间,这时需要调整镜像目录;场景:不想连服务器或者没有服务器,想在本地调试服务,该需求就非常重要。基于WSL2安装docker后,…

【Java】数组

目录 1.数组的定义与初始化 2.遍历数组 3.认识null 4.引用变量 5.返回多个值 6.数组拷贝 7.数组逆序 8.数组填充 9.小练习 //将整形数组转化为字符串 //二分查找优化 //冒泡排序优化 10.二维数组 //遍历二维数组 //不规则的二维数组 1.数组的定义与初始化 int…

了解国外SEO负面压制的现状与应对策略!

随着全球化的发展,越来越多的企业和品牌开始将目光转向海外市场,而谷歌作为全球最大的搜索引擎之一,也成为了外贸企业最主要的搜索引擎之一。 然而,随着谷歌的不断发展,国外SEO负面压制的现状也愈发严峻,外…

Android 9.0 Settings主菜单去掉自定义您的设备功能

1.前言 在9.0的系统rom定制化开发中,在系统Settings主页面一级菜单中,在开启护眼模式和改变系统密度的功能操作时,这时会发现在主菜单的网络菜单头部增加 自定义您的设备和设置护眼模式时间安排 等等相关的设置模块 这对于菜单布局显示相当不美观,产品要求不需要显示这些,…

SpringSecurity学习(四)密码加密、RememberMe记住我

文章目录密码加密一、简介密码为什么要加密常见的加密解决方案PasswordEncoder详解DelegatingPasswordEncoder二、自定义加密方式1. 使用灵活的密码加密方案(BCryptPasswordEncoder)加密验证(推荐)需要在密码前指定加密类型{bcryp…