001 仿muduo库实现高性能服务器组件_项目简介

news2024/11/13 16:32:26

​🌈个人主页:Fan_558
🔥 系列专栏:仿muduo
🌹关注我💪🏻带你学更多知识

文章目录

  • 一、项目简介
  • 二、所需知识储备
  • 三、什么是muduo
  • 四、Reactor模式
      • 单Reactor单线程:单I/O多路复⽤+业务处理
      • 单Reactor多线程:单I/O多路复⽤+线程池(业务处理)
      • 多Reactor多线程:多I/O多路复⽤+线程池(业务处理)

一、项目简介

我们知道通过socket可以实现一个简单的tcp服务器,可以进行简单的通信,但是如果有很多的客户端同时进行请求,那么很明显效率不高,该项目目标就是设计出是⼀个⾼并发服务器组件,可以简洁快速的完成一个高性能的服务器搭建,在此服务器的基础上,使用者可以添加各种应用层协议,由此实现多种功能的服务器,例如:HTTP服务器、FTP服务器、SSH服务器…
本项目则实现较为常见的HTTP服务器,即搭建出服务器组件后,只需要在应用层添加HTTP协议支持,便可完成一个服务器的搭建。
本项目核心集中在实现高并发高性能服务器组件(80%),通过该组件的设计可以学到Reactor的事件驱动处理模式的设计思想,其次20%在应用层协议支持上。
本项目服务器组件的设计代码量在1300行左右,HTTP协议支持代码量在600行左右,另外的本项目不包含任何的业务逻辑,具体要让服务器进行怎样的业务逻辑处理,得看组件使用者,组件使用者也只需要添加业务逻辑处理的接口即可。

二、所需知识储备

Linux:多线程、网络套接字编程、多路转接技术(epoll)、网络协议了解
C++:类和对象、多态、继承。一些C++11以及C++17的新特性:比如function、bind、智能指针(shared_ptr、weak_ptr)、mutex、regex正则表达式、any。

三、什么是muduo

Muduo 是一个用于 Linux 多线程服务器的 C++ 非阻塞网络库,由陈硕所写。它主要设计用于需要高性能网络通信的服务器端应用程序,特别适合于构建高并发的在线服务和分布式系统。Muduo 的设计哲学强调简单、高效和可靠,它提供了一套丰富的 API 来简化网络编程的复杂性,同时保持高性能。

四、Reactor模式

Reactor 模式是一种事件处理的设计模式,用于异步IO。这种模式通过将请求处理分配给不同的处理器来响应并处理IO事件,特别适用于高并发环境下的网络服务器。Reactor 模式能有效地管理和处理大量并发输入/输出操作,减少系统资源消耗,提高应用性能。
简单理解就是使用 io多路复用统⼀监听事件,收到事件后分发给处理进程或线程,是编写高性能网络服务器的必备技术之一。
Reactor模型可以分为三种类型:① 单Reactor单线程,② 单Reactor多线程,③ 多Reactor多线程。

单Reactor单线程:单I/O多路复⽤+业务处理

  1. 通过IO多路复⽤模型进⾏客⼾端请求监控
  2. 触发事件后,进⾏事件处理
    a. 如果是新建连接请求,则获取新建连接,并添加⾄多路复⽤模型进⾏事件监控。
    b. 如果是数据通信请求,则进⾏对应数据处理(接收数据,处理数据,发送响应)。
    优点:所有操作均在同⼀线程中完成,思想流程较为简单,不涉及进程/线程间通信及资源争抢问题。
    缺点:所有的事件监控以及业务处理都是在一个线程中完成的,⽆法有效利⽤CPU多核资源,很容易达到性能瓶颈。
    适⽤场景:适⽤于客⼾端数量较少,且处理速度较为快速的场景。(处理较慢或活跃连接较多,会导致串⾏处理的情况下,后处理的连接⻓时间⽆法得到响应)
    在这里插入图片描述

单Reactor多线程:单I/O多路复⽤+线程池(业务处理)

  1. Reactor线程通过I/O多路复⽤模型进⾏客⼾端请求监控
  2. 触发事件后,进⾏事件处理
    a. 如果是新建连接请求,则获取新建连接,并添加⾄多路复⽤模型进⾏事件监控。
    b. 如果是数据通信请求,则接收数据后分发给Worker线程池进⾏业务处理。
    c. ⼯作线程处理完毕后,将响应交给Reactor线程进⾏数据响应
    优点:充分利⽤CPU多核资源
    缺点:多线程间的数据共享访问控制较为复杂,单个Reactor 承担所有事件的监听和响应,在单线程中
    运⾏,⾼并发场景下容易成为性能瓶颈

在这里插入图片描述

多Reactor多线程:多I/O多路复⽤+线程池(业务处理)

  1. 在主Reactor中处理新连接请求事件,有新连接到来则分发到⼦Reactor中监控
  2. 在⼦Reactor中进⾏客⼾端通信监控,有事件触发,则接收数据分发给Worker线程池
  3. Worker线程池分配独⽴的线程进⾏具体的业务处理
    a. ⼯作线程处理完毕后,将响应交给⼦Reactor线程进⾏数据响应
    优点:充分利⽤CPU多核资源,主从Reactor各司其职

在这里插入图片描述

项目定位

该项目要实现的是主从Reactor模型服务器,也就是主Reactor线程仅仅监控监听描述符,获取新建连接,保证获取新连接的⾼效性,提⾼服务器的并发性能。

主Reactor获取到新连接后分发给⼦Reactor进⾏通信事件监控。⽽⼦Reactor线程监控各⾃的描述符的读写事件进⾏数据读写以及业务处理。

One Thread One Loop的思想就是把所有的操作都放到⼀个线程中进⾏,⼀个线程对应⼀个事件处理的循环。

当前实现中,因为并不确定组件使⽤者的使⽤意向,因此并不提供业务层⼯作线程池的实现,只实现主从Reactor,⽽Worker⼯作线程池,可由组件库的使⽤者的需要⾃⾏决定是否使⽤和实现。
因此此项目真正要实现的是如下结构
在这里插入图片描述

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

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

相关文章

车载电子电器架构 —— 应用软件开发(下)

车载电子电器架构 —— 应用软件开发(下) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…

美军配备人工智能武器的机器狗引发伦理争议

近日,美国海军陆战队特种作战司令部(MARSOC)的一项测试引发了全球关注:他们正在评估一种由“幽灵机器人”公司研发的最新型机器狗,并考虑为其配备“玛瑙工业”公司提供的武器系统。这一消息犹如在平静的湖面投下一颗石…

Star-CCM+中滞环的实现—场平均监视

前言 前文有介绍过通过更新事件来实现滞环,但是更新事件的方法比较繁琐,应用起来比较困难,本文将介绍一种简单的方法来实现滞环功能。即通过场平均监视来实现,具体方法如下: 一 创建场平均监视 首先在检测量下创建“场平均监视”,具体操作步骤如下图所示: 二 创建质量…

看这两位东北圣女美吗?如何描写美女的大长腿?

看这两位东北圣女美吗?如何描写美女的大长腿? 最近署名为懂球娘娘的一篇描写东北圣女的文章火了,文中描述了海棠朵朵与辛芷蕾这两位娇媚动人的角色。其美艳动人的形象和魅力四溢的描写让人为之倾倒。 这种通过文字展现人物魅力的能力让人佩服…

中间件-------RabbitMQ

同步和异步 异步调用 MQ MQ优势:①服务解耦 ②异步调用 ③流量削峰 结构 消息模型 RabbitMQ入门案例,实现消息发送和消息接收 生产者: public class PublisherTest {Testpublic void testSendMessage() throws IOException, TimeoutExce…

【Visual Studio】没法进断点

文章目录 先看看文心一言给的回答 开发过程中,没法进断点的情况还是很少的(指的是一直进不去的情况,热重载导致的都可以通过重启ide解决),但还是有极少数情况下会出现。 先看看文心一言给的回答 如果Visual Studio无…

2024年NGFW防火墙安全基准-防火墙安全功效竞争性评估实验室总结报告

Check Point 委托 Miercom 对 Check Point 下一代防火墙 (NGFW) 开展竞争性安全有效性测试, 选择的竞品分别来自 Cisco、Fortinet 和 Palo Alto Networks。对 Zscaler 的测试涉及他们的 SWG(安全网关)。测试内容包括验证防病毒、反恶意软件、…

文本处理工具grep及sed

文章目录 一、grep文本处理工具二、sed文本处理工具基本用法sed脚本格式搜索替代 一、grep文本处理工具 选项含义-color对匹配到的文本着色显示-m 次数匹配到规定的次数后停止-v显示不被命令匹配到的行,即取反-i忽略字符大小写-n显示匹配的行号-c统计匹配的行数-o仅显示匹配到…

乡村振兴的乡村文化传承与活化:活化乡村传统文化,传承乡村文化基因,打造具有文化魅力的美丽乡村

目录 一、引言 二、乡村文化的独特价值与现状 三、活化乡村传统文化的策略 1、挖掘乡村文化资源 2、创新文化表达方式 3、加强文化产业发展 四、传承乡村文化基因的途径 1、加强文化教育 2、培育文化人才 3、弘扬文化精神 五、打造具有文化魅力的美丽乡村 1、规划乡…

输入输出(1)——C++的输入输出概述

目录 一、C的输入输出 (一) C的输入输出 (二)C语言的scanf和printf 二、C的输入输出流 (一) iostream类库中有关的类 (二) iostream.h头文件的流对象和重载运算符 一、C的输入输出 (一) C的输入输出 之前用到的输入输出,都是以终端…

最近5星好评的华为的书《常变与长青》

常变与长青 (豆瓣) 作者简介 郭平,1988年加入华为,历任产品开发部项目经理、供应链总经理、总裁办主任、管理工程部总裁、企业发展部总裁、终端公司董事长兼总裁、公司轮值CEO、财经委员会主任、公司副董事长、轮值董事长等职务,现任公…

Science 基于尖峰时序编码的模拟神经触觉系统,可实现动态对象分类

快速处理和有效利用手与物体交互过程中产生的动态触觉信号(例如触摸和抓握)对于触觉探索和灵巧的物体操作至关重要。将电子皮肤(e-skins)推进到模仿自然触觉的水平,是恢复截肢者和瘫痪患者丧失的功能的可行解决方案&am…

IDE上传本地仓库到GitHub

IDE上传本地仓库到GitHub 1、选择远程仓库平台2、下载安装Git3、IDE集成Git4、本地项目上传GitHub 1、选择远程仓库平台 1.1、注册远程仓库平台 常见的远程仓库托管平台有: 1)GitHub 域名:https://github.com 介绍:GitHub是全球最…

CAD二次开发(4)-编辑图形

工具类:EditEntityTool.cs using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Th…

等保2.0看这一篇就够了

一、等级保护介绍 1.1什么是等级保护 网络安全等级保护是指对国家重要信息、法人和其他组织及公民的专有信息以及信息和存储、传输、处理这些信息的信息系统分等级实行安全保护,对信息系统中使用的信息安全产品实行按等级管理,对信息系统中发生的信息安…

有人物联网4G模块【WH-LTE-7S1】超简单上云流程完整版~!(一)

目录 前言一、所需环境二、使用步骤1.官方资料包获取2.硬件连接3.云平台配置 四、结尾 前言 废话不多说直接上干货 一、所需环境 1、有人家的WH-LTE-7S1(带配套底板)。 2、串口工具(TTL或USB485)。二、使用步骤 1.官方资料包获…

颜色值进制转换

颜色值进制转换 专业的和非专业程序员在编程时都碰到过颜色值的表达式。特别是在编制网页和设计界面时,都要选择颜色。各语言的颜色值表达式就两种,十六进制的颜色值hex$和十进制的RGB格式。现成的调色板颜色表也是这两种格式。写代码时会遇到写颜色值码…

NVIDIA Jetson 上编译opencv 4.9.0

直接上命令 cmake .. \ -DCMAKE_C_COMPILER/usr/bin/gcc-7 -DCMAKE_CXX_COMPILER/usr/bin/g-7 \ -DCMAKE_BUILD_TYPERelease \ -DCMAKE_INSTALL_PREFIX/usr/local \ -DOPENCV_ENABLE_NONFREE1 \ -DBUILD_opencv_python21 \ -DBUILD_opencv_python31 \ -DCUDA_TOOLKIT_ROOT_DIR…

使用Django框架搭建Web应用

文章目录 简介安装Django创建一个Django项目创建一个Django应用编写视图配置URL运行开发服务器总结与拓展数据库集成管理后台表单处理模板引擎安全性 简介 Django 是一款基于 Python 语言的开源 Web 应用框架,采用了 MVC(模型-视图-控制器)设…