TianMu
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于

Muduo库源码剖析(6) TcpServer

TcpServer类详解 TcpServer将会作为Muduo库对外开放的核心类, 其提供接口开启服务器并设置设置回调函数与线程数量. 我们可以先预测一下TcpServer将要实现的功能 : 构造Acceptor并控制listen决定开始监听的时机. 构造EventLoopThreadPool并开辟设置的线程数量. 处理Acceptor监听到的每个connfd, 构建对应的TcpConne
2025-04-23
#Muduo

Muduo库源码剖析(5) TcpConnection

Buffer 和 TcpConnection 详解 本章我们将学习Buffer类和其上级类TcpConnection, 先了解两个类的职能 : Buffer 和通常的缓冲区认知类似, 目的在于提升传入传出的效率, 就是在read中可以提前把数据从内核接收缓冲区中读出, 便于对端再向内核接收缓冲区输入. 在write中可以提前把要写入的数据存进缓冲区, 等待内核发送缓冲区空余. TcpCo
2025-04-21
#Muduo

Muduo库源码剖析(4) Acceptor

Socket + Acceptor 详解 本章我们将学习Socket类和Acceptor类, 首先应当明确其在Muduo库中的职责所在 : Socket就是对原生socketAPI的封装, 供Acceptor使用. Acceptor简单来说是用来处理新连接的建立的. 我们来认识一下Acceptor的调用流程 TcpServer中会维护一个Acceptor作为成员变量, 由TcpServ
2025-04-17
#Muduo

Muduo库代码剖析(3) ThreadPool

ThreadPool相关 本章我们将把EventLoop和C++11的thread结合, 实现Thread / EventLoopThread / EventLoopThreadPool. 首先我们应当明晰将创建的三个类的意义何在 : Thread : 这是对thread库的封装, 会增加对各种线程运行状态与数据的维护. EventLoopThread : 将Thr
2025-04-16
#Muduo

Muduo库代码剖析(2) EventLoop

EventLoop 详解 EventLoop类似于Reactor模型中的反应堆(Reactor)和事件分发器(Demultiplex)的合并, 其目的在于高效的接收事件, 并正确分配给对应的事件处理器. EventLoop中有两类关键的子控件 : Channel 和 Poller. Channel 即通道, 其负责对单个文件描述符的事件管理, 存储该文件描述符感兴趣的事件与对应回调函数, 该
2025-04-15
#Muduo

Muduo库代码剖析(1)

理论知识 阻塞, 非阻塞, 同步, 异步数据准备 - 网络IO阶段1 阻塞 : 当前线程调用IO方法的线程进入阻塞状态 非阻塞 : 不会改变线程状态, 通过返回值判断 size == 0 对端关闭了连接 size > 0 接收到资源 size == 0 && errno = EAGAIN 数据读写 - 网络IO阶段2
2025-04-07
#Muduo

算法 状压dp | 区间dp | 树形dp

状压dp棋盘型状压, 重点考虑行与行之间的转移. 首先枚举每行可能的状态, 预处理出合法行状态. 可以选择预处理出行与行之间的合法转移 f[i][j]代表处理完前i行, 第i行状态为j的xxx. 转移方程通过枚举前状态k来实现, 看k是否可以合法转移为j 玉米田 : 十字型 + 地图机制 123456789101112131415161718192021222324252627
2025-04-03
#算法 #动态规划

算法 背包dp

关于”不大于””恰好””至少是”的讨论最标准的背包问题中, 装入背包的体积是要不大于m的, 但有些题目要求装入体积恰好是m, 或者至少是m, 思路一样, 但是初始化和最终获取答案的方式有区别. 12345// 不大于for(int i = 1; i <= n; i ++ ) for(int j = m; j >= v[i]; j -- ) f[j] = max(f[
2025-03-30
#算法

算法 树状数组|线段树

树状数组 O(logn) 在某个位置上的数加上一个数, 单点修改 求任意某区间的前缀和, 区间查询 如果想用前缀和实现单点修改+区间查询, 需要O(n) + O(1) = O(n), 而树状数组中两种操作都是O(logn). tr[x] = ( x - lowbit(x), x ] , 每个tr[x]代表了这个一个区间内的前缀和 三大操作 : lowbit + add +
2025-03-29
#算法

算法 差分

普通的差分其实很好理解, 就是将一次区间的加减操作换成了两个点的操作 : 12345void insert(int l, int r, int c, int b[]){ b[l] += c; b[r + 1] -= c;} 假设数组大小为n, 其对时间复杂度的贡献发生在区间操作很多时, 假定操作数为m, 那么差分就可以将时间复杂度O(nm)降到O(n), 一般不
2025-03-17
#算法
12345…9

搜索

Hexo Fluid
总访问量 次 总访客数 人