12.optional和variant
std::optional表示 一个值 存在 或 不存在,给单个类型做“可空标记“。 头文件:<optional> 有值:存储一个 T 类型对象 无值:空状态(std::nullopt) 1. 基础应用场景可以用作成员变量类型,类中某些属性可选但非必选,不用默认值占位(-1,0等特殊值标识无效),语义更清晰。 示例: 12345678class AgentMessage{ private: std::string message_id_; std::optional<std::string> context_id_; std::optional<std::string> task_id_;}; 这是一个agent消息体的示例。 message_id_:必填消息唯一标识 context_id_/task_id_:可选,代表上下文 ID、任务 ID,不存在则置 std::nullopt 2. 判断是否有值两种写法等价: 12345678910if (opt1.has_value()...
1.Docker-简介
Docker核心概念与实战指南1.Docker基础概念 Docker概述:Docker是一种成熟高效的软件部署技术,利用容器化技术为应用程序封装独立的运行环境,每个运行环境即为一个容器,承载容器运行的计算机称为宿主机。 容器与虚拟机的区别: Docker容器:多个容器共享同一个系统内核。 虚拟机:每个虚拟机包含一个操作系统的完整内核。 优势:Docker容器比虚拟机更轻量、占用空间更小、启动速度更快。 镜像(Image): 定义:镜像是容器的模板,可类比为软件安装包。 类比:类似于制作糕点的模具,可用于创建多个糕点(容器),并可分享给他人。 容器(Container): 定义:容器是基于镜像运行的应用程序实例,可类比为安装好的软件。 类比:类似于模具制作出的糕点。 Docker仓库(Registry): 定义:用于存放和分享Docker镜像的场所。 Docker Hub:Docker的官方公共仓库,存储了大量用户分享的Docker镜像。 2.Docker安装 运行环境:Docker通常基于Linux容器化技术,在Windows和Mac电脑上,Docker通过虚拟...
3.Linux绝对路径与相对路径
Linux 绝对路径与相对路径在 Linux 树形目录结构中,路径就是定位文件 / 目录的 “地址”,绝对路径和相对路径是两种定位方式,核心区别在于起始点不同。 一、绝对路径1. 定义从 根目录 / 出发的完整路径,相当于 “从城市原点出发的详细地址”。 2. 核心特征 路径开头必须是 / 唯一性:无论当前在哪个目录,绝对路径都能精准定位目标 稳定性:适合写脚本、配置文件(不会因当前目录变化而出错) 3. 示例 目标位置 绝对路径 普通用户主目录 /home/zhangsan 系统用户配置文件 /etc/passwd Nginx 配置文件 /etc/nginx/nginx.conf 临时文件目录 /tmp 二、相对路径1. 定义从 当前所在目录 出发的简化路径,相当于 “从你现在站的位置出发的路线”。 2. 核心特征 路径开头不是 / 相对性:同一个目标,在不同目录下的相对路径不同 便捷性:手动操作时输入更短 3. 关键特殊符号这两个符号是相对路径的核心,必须牢记: 符号 含义 示例 . 代表当前目录 ./a.out → 当前目...
2.Linux目录
Linux 目录结构详解(通俗版)Linux 采用 树形目录结构,所有文件和目录都挂在根目录 / 下,就像一棵大树从根部长出所有枝干。理解目录结构的核心是记住:每个目录都有明确的分工,存放特定类型的文件。 一、根目录 /所有目录的 “祖宗”,Linux 系统的起点。所有文件和子目录都直接或间接存放在根目录下。 注意:根目录 / 和用户主目录 ~ 是两回事,~ 一般是 /home/用户名。 二、核心目录功能速查表 目录路径 通俗名称 存放内容 一句话总结 /bin 二进制命令目录 系统最基础的命令(如 ls、cp、mv、cat) 普通用户和 root 都能执行的核心命令 /sbin 系统命令目录 系统管理命令(如 ifconfig、reboot、fdisk) 只有 root 用户才能执行的命令(管理系统用) /home 用户主目录 普通用户的个人文件夹(如 /home/zhangsan) 每个用户的 “私人空间”,存自己的文件和配置 /root 管理员主目录 root 用户的个人文件夹 相当于 root 用户的 ~,普通用户无权访问 /etc 配置文件...
1.Linux内核
Linux内核一、进程调度子系统(Process Scheduler)1. 核心职责进程调度子系统是内核的 “CPU 资源分配器”,负责决定哪个进程 / 线程在哪个 CPU 核心上**何时运行 **,核心目标是: 公平性:所有进程都能获得合理的 CPU 时间片; 高效性:最大化 CPU 利用率,减少进程切换开销; 响应性:保证交互式进程(如终端、GUI 程序)的快速响应。 2. 核心概念与机制(1)进程状态内核通过 task_struct 结构体的 state 字段描述进程状态,关键状态包括: 状态 含义 TASK_RUNNING 运行态 / 就绪态:进程正在 CPU 上运行,或在就绪队列等待调度 TASK_INTERRUPTIBLE 可中断睡眠态:进程等待某事件(如 IO 完成、信号),可被信号唤醒 TASK_UNINTERRUPTIBLE 不可中断睡眠态:进程等待硬件事件(如磁盘 IO),不能被信号唤醒,避免硬件操作被打断 TASK_ZOMBIE 僵尸态:进程已终止,但父进程未调用 wait 回收其资源,task_struct ...
muduo结构图
核心事件流转完整流程图(从监听连接到数据收发)123456789101112131415161718192021222324252627282930313233343536启动TcpServer │ ▼创建Acceptor → 绑定baseLoop(主EventLoop) → 创建listenfd → socket/bind/listen │ ▼Acceptor创建AcceptorChannel(绑定listenfd) → 注册到baseLoop的Poller │ ▼baseLoop进入EventLoop::loop() → Poller调用epoll_wait监听listenfd的可读事件 │ ▼客户端发起连接 → listenfd触发可读事件 │ ▼Poller将AcceptorChannel加入activeChannels_ → EventLoop处理Channel回调 │ ▼Acceptor执行accept() → 获取新连接connfd → 创建TcpConnection实例 │ ...
原代码解析
源代码地址:https://gitee.com/lpzdinghai/lpzmuduo 一、整体架构:主从 Reactor 架构整个库的核心是主 Reactor(mainLoop)+ 从 Reactor(subLoop) 的多线程架构,目的是将连接监听和数据读写解耦,充分利用多核 CPU,提升并发处理能力。 架构核心分工 角色 所属线程 核心作用 核心组件 主 Reactor 主线程(main) 监听客户端新连接、分配连接 Acceptor + mainLoop 从 Reactor 工作线程(sub) 处理已建立连接的所有 IO 事件 EventLoopThreadPool + subLoop 连接管理 跨线程 维护 TCP 连接的生命周期 TcpConnection + Channel IO 复用 所有 EventLoop 监听 fd 事件并上报 Poller(EPollPoller) 线程管理 主线程 管理工作线程,创建 subLoop EventLoopThreadPool + Thread 架构核心思想 主线程只做最轻量化的连接监听,不处理任...
day21-编译安装脚本和测试代码
autobuild.sh这是一个自动编译 + 自动安装muduo的一键部署脚本 12345678910111213141516171819202122232425262728293031#!/bin/bashset -e# 如果没有build目录,创建该目录if [ ! -d `pwd`/build ]; then mkdir `pwd`/buildfirm -rf `pwd`/build/*cd `pwd`/build && cmake .. && make# 回到项目根目录cd ..# 把头文件拷贝到 /usr/include/mymuduo so库拷贝到 /usr/lib PATHif [ ! -d /usr/include/lpzmuduo ]; then mkdir /usr/include/lpzmuduofifor header in `ls *.h`do cp $header /usr/include/lpzmuduodonecp `pwd`/lib/liblpzmuduo.so /usr/l...
day20-TcpServer+TcpConnection
TcpServer + TcpConnection 完整联动流程图12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364【TcpServer 启动】 ↓1. TcpServer 构造 ├─ 创建 Acceptor(监听socket) └─ 创建 EventLoopThreadPool 线程池 ↓2. TcpServer::start() ├─ 启动IO线程池 └─ Acceptor::listen() 开启监听 + 绑定accept回调 ↓【新连接到达】3. 客户端连接 → 监听fd触发读事件 ↓4. Acceptor::handleAccept() ├─ accept 拿到 客户端connfd └─ 回调 TcpServer::newConnection ↓5. TcpServer::newConnection() ├─ 1....
day19-TcpConnection
TcpConnection是muduo 网络库核心的 TCP 连接类,封装了一个完整的 TCP 客户端 - 服务端连接,是网络通信中处理数据读写、连接状态、事件回调的核心组件,我会逐行、分模块给你讲透。 核心定位 对应一个已建立的 TCP socket 连接,生命周期由智能指针管理 运行在 subLoop(IO 线程) 中,不与主线程耦合 封装 socket、channel、缓冲区,对外提供简洁的连接操作接口 处理读、写、关闭、错误四种 IO 事件 TcpConnection.h123456789101112131415#pragma once#include "Buffer.h"#include "InetAddress.h"#include "Callbacks.h"#include "Timestamp.h"#include "noncopyable.h"#include <string>#include <atomic>#include <m...