muduo网络库学习(1)

article/2025/11/6 18:54:28

muduo网络库学习(1)

文章目录

  • muduo网络库学习(1)
  • 前言
  • 一、muduo是什么?
  • 二、代码结构
    • 1.base库
    • 2.net库
    • 3.附属库
  • 二、网络库结构
  • 总结


前言

本章节主要介绍muduo网络库的整体架构!

一、muduo是什么?

muduo是一款基于reactor的网络库,整个网络库采用oneloopperthread+threadpool的方法,代码简洁,性能优越·。

二、代码结构

1.base库

base库如下:

在这里插入图片描述

base库主要是分装了一些net中需要的调用,列如为net库提供高性能日志,线程封装,线程池封装等!

2.net库

net如下:
在这里插入图片描述

net部分使用base中的工具类实现更高层次的逻辑,网络编程无非是对socket和其使用的epoll/poll等进行封装,使其便于使用,屏蔽掉底层网络库的一些 “坑”, 在满足了基础的网络IO之后,就需要考虑高性能,高并发的问题,muduo 的是由poll/epoll 这些IO复用模型构成,但是单个IO线程在面对大量请求时难免处理不过来,所以就需要结合多线程或者线程池,一个线程对应一个epoll进行网络IO,这样就可以充分利用硬件多核系统。从软硬两方面综合提升性能。net部分封装的较为彻底,对上层提供的接口简单易用,所以涉及复杂的内部处理,接下来就对其内部实现进行探究。(图中灰色的类是内部类,白色的是外部类)

3.附属库

如下:

在这里插入图片描述

不是muduo库的核心,主要是对muduo库进行一些应用

二、网络库结构

在这里插入图片描述

其中灰色部分是用户不可见的,白色部分是用户可见的,黑色箭头代表着一对一关系,白色箭头代表着多对一关系,同时黑色箭头代表着后者控制前者的生存期。

EventLoop:是对时间循环的抽象

Poller是对IO复用的抽象,它有两个派生类PollPoller以及EpollPoller,分别封装了epoll和poll,这个是muduo唯一一个基于面向对象思想编写的类。EventLoop与Poller是组合关系,一个EventLoop包含一个poll,EventLoop控制Poller的生存期。EventLoop中的loop调用Poller中的poll函数进行实现。

Channel是对IO事件(对应一个套接字)的响应注册的封装,其中函数update()负责将IO事件通过EventLoop中的updateChannels–>poller中的updateChannels,从而实现了对IO事件的注册。其中handleEvent负责对IO事件中发生可读可写等事件进行处理。与EventLoop的关系:EventLoop对应着多个Channel对象。
Channel的生存期不由TcpConnection,Acceptor,Connctor等拥有channel的来控制,而不是由EventLoop来控制(EventLoop中包含着一个WakeupChannel,这个channel由Event Loop控制)。虽然Channel对应着一个文件描述符fd,但是文件描述符的生存期确实由Socket来控制。

Acceptor是被动连接的抽象,它包含了一个监听文件描述符对应的Channel,将这个Channel注册到Eventloop中一旦由可读事件到来,触发Channel的handleEvent从而回调了Acceptor中handleread()。

Connector是一个对主动连接的抽象,包含了一个主动发起连接文件描述符的Channel,注册了handleWrite,handleerror等!

TcpConnction是一个已连接的抽象,包含了一个标志着连接文件描述符的Channel,对改Channel注册了handleread,handlewrite,handleerror等!

TcpServer是对服务器的抽象,一个TcpServer对应着一个Acceptor,一个TcpsServer对应着多个TcpConnection。TcpServer控制Acceptor的生存期,但是不控制Tcpconnection的生存期(列如:TcpClient关闭连接同样会导致Tcpconnction的销毁)

TcpClient是对客户端的抽象,一个TcpClient对应着一个Connector,一个TcpClient对应着多个TcpConnection。TcpClient控制Connector的生存期,但是不控制Tcpconnection的生存期(列如:TcpServer关闭连接同样会导致Tcpconnction的销毁)

总结

` 牢记muduo是一个oneloop perthread +threadpool框架。


http://chatgpt.dhexx.cn/article/hPkTwBpU.shtml

相关文章

muduo

muduo 概述 muduo是基于Reactor模式的网络库,用于响应计时器和IO事件。 muduo采用基于对象而非面向对象的设计风格,其事件回调采用functionbind,用户在使用muduo的时候不需要继承其中的class 架构 Multiple Reactor Reactor模式&#xff1a…

muduo日志库原理以及源码分析

muduo日志库特点 日志批量写入批量唤醒写线程写日志用notifywait_timeout 方式触发日志的写入锁的粒度,双缓冲,双队列buffer默认 4M 缓冲区, buffers 是 buffer 队列, push 、 pop 时使用 move 语义 减少内存拷贝 muduo的这些特点…

muduo网络库与服务模型介绍

目录 一、muduo网络库简介 1、特点 2、代码结构 (1)公共接口 (2)内部实现 二、muduo线程模型 1、单线程Reactor 2、Reactor线程池 3、one loop per thread 4、one loop per thread 线程池 muduo是陈硕个人使用C开发的一…

muduo 架构解析

muduo是一个基于Reactor模式的C网络库。它采用非阻塞I/O模型,基于事件驱动和回调。我们不仅可以通过muduo来学习linux服务端多线程编程,还可以通过它来学习C11。     Reactor是网络编程的一般范式。我们这里从reactor模式为出发点,根据R…

muduo库介绍

muduo库是一个多线程服务器开发库 muduo 作者陈硕,现在在美国加州硅谷某互联网大公司工作,从事大规模分布式的可靠系统工程。这个库是作者多年工作的总结,可以说大家学通了这个库,找一份Linux服务器开发的工作是没问题的&#xf…

C++ muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装

Muduo is a multithreaded C network library based on the reactor pattern. muduo库的介绍就是:一个基于reactor反应堆模型的多线程C网络库。 muduo网络库是C语言开发的一个非常优秀的网络库,作者陈硕,muduo网络库在多线程环境下性能非常高…

遗传算法示例

遗传的概念: 遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。 遗传算法的特点: 对于搜索算法的共同特征有 首先组成一组候选解。依据某些使用性条件测算这些…

10分钟搞懂遗传算法

大自然有种神奇的力量,它能够将优良的基因保留下来,从而进化出更加强大、更加适合生存的基因。遗传算法便基于达尔文的进化论,模拟了自然选择,物竞天择、适者生存,通过N代的遗传、变异、交叉、复制,进化出问…

遗传算法简单实例

遗传算法的手工模拟计算示例 为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各 个主要执行步骤。 例:求下述二元函数的最大值: (1) 个体编码 遗传算法的运算对象是表示个体的符号串&#xff0…

遗传算法(基础知识)

遗传算法(基础知识) 遗传算法简称GA(Genetic Algorithms)模拟自然界生物遗传学(孟德尔)和生物进化论(达尔文)通过人工方式所构造的一类 并行随机搜索最优化方法,是对生物…

遗传算法概念、步骤、应用解析(案例直白--黄含驰)

遗传算法 ①  在几十亿年的演化过程中,自然界中的生物体已经 形成了一种优化自身结构的内在机制,它们能够不 断地从环境中学习,以适应不断变化的环境  对于大多数生物体,这个过程是通过自然选择和有性生殖来完成的。自然选择…

遗传算法超详细图解

遗传算法(Genetic Algorithm)顾名思义,是一种基于自然选择原理和自然遗传机制的启发式搜索算法。该算法通过模拟自然界中生物遗传进化的自然机制(选择、交叉和变异操作),将好的遗传基因(最优目标…

遗传算法及其应用

一、遗传算法的定义 遗传算法的基本思想是参考生物学中物种“物竞天择,适者生存”的思想。在计算机中,通过给定约束条件,使初始参数不断迭代,从而接近最优解。 遗传算法可描述为: Initialize population process-chr…

详解遗传算法(含MATLAB代码)

目录 一、遗传算法概述 二、遗传算法的特点和应用 三、遗传算法的基本流程及实现技术 3.1 遗传算法的基本流程 3.2 遗传算法的实现技术 1.编码 2.适应度函数 3.选择算子 4.交叉算子 5.变异算子 6.运行参数 四、遗传算法的基本原理 4.1 模式定理 4.2 积木块假设 …

遗传算法步骤

遗传算法是一种模拟生物自然进化的一种算法,通话对生物进化的模拟,实现对数值函数的模拟计算。它主要分为四个步骤:初始化、杂交、变异和选择。相关实现可参考https://github.com/ShaquallLee/evolutionary-programming/tree/master/aEP 1、…

遗传算法原理+程序案例详解

注明:这篇遗传算法程序我在网上看到多次,很多人在转载时,都称已经修改了错误的地方,程序在matlab上能够运行。 当我在学习这段程序时,发现结果仍存在很大问题(不稳定、不准确)。我一行一行看时,发现不仅有少…

遗传算法、遗传算法库函数ga和gamultiobj、遗传算法工具箱GOT实例介绍

目录 前言 适应度函数和目标函数的关系 1. 常规遗传算法 2.结合非线性规划fmincon函数的遗传算法 2.1 fmincon非线性规划函数使用 2.2 结合非线性规划fmincon函数的遗传算法使用及示例 2.2.1 编码 2.2.2 选择 2.2.3交叉 2.2.4变异 2.2.5非线性规划fmincon函数 2.2.…

遗传算法原理与应用详解

遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 。 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。因此在介绍遗传算法前有必要简单的介绍生物进化知识。 一.进化论知识 作为遗传算法生物背景的介绍&#xff0…

遗传算法(一) 遗传算法的基本原理

遗传算法(一)遗传算法的基本原理 1.概述 遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗…

算法理解-遗传算法(Genetic Algorithm)(一个带计算过程的例子)

想要快速的了解一个算法,最好的方式便是拿个例子手动进行实现算一遍。这里借鉴了网络上的一个例子,求解如下的一个函数: f(x)x∗sin(10∗π∗x)2x∈[−1,2] f(x) = x*sin(10*\pi*x)+2 \\ x \in[-1, 2] 其函数图像为: 例子来源&a…