epoll 和 CMake 的使用 1. epoll 简介 epoll 是 Linux 系统提供的一种 IO 多路复用机制,用来替代传统的 select 和 poll。它的核心优势是: 高效:性能不会随着监听的文件描述符数量增加而下降。 内存友好:只返回就绪的事件,而不是遍历所有文件描述符。 支持边缘触发:可以更灵活地控制事件触发方式。 2. epoll 的三大函数 epoll_create、epoll_ctl 和 epoll_wait 是 epoll 机制的三个核心函数,可以类比为: epoll_create():创建一个 epoll 实例(相当于创建一个事件监听器)。 epoll_ctl():管理要监听的文件描述符(添加、修改、删除监听列表中的 fd)。 epoll_wait():等待事件发生(阻塞等待,直到有事件发生或超时)。 这三兄弟的关系就像一个管理系统的三个操作: epoll_create():创建一个管理办公室。 epoll_ctl():向办公室登记/修改/删除要监控的员工(文件描述符)。 epoll_wait():在办公室等待,当有员工出事(事件发生)时进行 ...
数据类型 1. 常用数据类型一览 分类 数据类型 说明 数值类型 BIT(M) 位类型。M 指定位数,默认值 1,范围 1–64。 TINYINT [UNSIGNED] 很小的整数。带符号范围:-128 ~ 127;无符号范围:0 ~ 255。默认为有符号。 BOOL / BOOLEAN 布尔类型,是 TINYINT(1) 的同义词,0 表示 FALSE,非 0 表示 TRUE。 SMALLINT [UNSIGNED] 小整数。带符号范围:-32,768 ~ 32,767;无符号范围:0 ~ 65,535。 INT / INTEGER [UNSIGNED] 最常用的整数类型。带符号范围:-2,147,483,648 ~ 2,147,483,647;无符号范围:0 ~ 4,294,967,295。 BIGINT [UNSIGNED] 大整数。带符号范围:-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807;无符号范围:0 ~ 18,446,744,073,709,551,615。 F ...
高级 IO Linux 高级 IO | CSDN 1. 正确认识 IO 1. IO 的本质 I/O(Input / Output)指的是 CPU 与外设之间的数据交互过程。在冯·诺依曼结构中,系统由:CPU(运算与控制)、内存(暂存数据与指令)、外设(磁盘、网卡、显示器、键盘等)组成。 I/O 就是:数据在「内存 ↔ 外设」之间的传输。所以: 输入(Input):外设 → 内存(例如:键盘输入、磁盘读文件、网卡收包)。 输出(Output):内存 → 外设(例如:屏幕显示、磁盘写文件、网卡发包)。 2. IO 的关键特征 慢:外设的速度远慢于 CPU 和内存。因此,IO 通常是性能瓶颈。 异步性:外设工作时 CPU 可去做别的事。操作系统通过 中断、DMA(直接内存访问) 来提高效率。 3. 文件 IO 与 网络 IO IO 类型 外设 操作系统抽象 本质 文件 IO 磁盘 文件描述符(fd) 把数据从磁盘读入内存或写出 网络 IO 网卡 套接字(socket) 把数据从网卡缓冲区读入内存或写出 对操作系统来说,一切皆文件,无论是磁盘文件、管道、套 ...
Linux
未读其他重要协议和技术 DNS 协议、ICMP 协议、NAT 技术 | CSDN 1. DNS 1. DNS 背景与作用 DNS(Domain Name System,域名系统) 是互联网中 负责把域名转换为 IP 地址 的系统。人记域名(如 www.baidu.com),机器识别 IP(如 110.242.69.21)。DNS 就是充当这两者之间的“翻译官”。 为什么需要 DNS? IP 地址难记、会变动,而域名容易记。 访问网站、发邮件、请求 API 时都依赖域名解析到具体主机。 2. 域名简介 域名是分层结构(从右往左层级递减): 1234www.example.com.│ │ └── 顶级域(TLD):.com / .org / .cn / .edu│ └────────── 二级域(注册主体):example└────────────── 主机名(子域):www(可省略) 说明: 根域:隐藏的 “.”,由全球 13 组根 DNS 服务器管理。 顶级域(TLD):如 .com:商业类;.net:网络服务类;.org:开源组织或非盈利组织。 二级域: ...
表的操作 1. 创建表 1. 语法格式 CREATE TABLE 用于在数据库中创建一张新的表,可以定义字段名、数据类型、约束等信息。 123456CREATE TABLE [IF NOT EXISTS] 表名 ( 列名1 数据类型 [列级约束], 列名2 数据类型 [列级约束], ... [表级约束]) [ENGINE=存储引擎] [DEFAULT CHARSET=字符集] [COLLATE=校验规则]; 参数说明: 参数 说明 IF NOT EXISTS 如果表已存在则报错,没有才创建 数据类型 定义字段所能存储的数据类型,如 INT、CHAR、VARCHAR、DATE、FLOAT 等 列级约束 针对单个列的约束,如 NOT NULL、DEFAULT、AUTO_INCREMENT、PRIMARY KEY 表级约束 跨列的约束,如联合主键、外键等 ENGINE 存储引擎,如 InnoDB、MyISAM CHARSET 字符集,用于指定表所采用的 编码格式,如果没有指定则以所在数据库的编码格式为准。 COLLATE 字符比较 ...
库的操作 1. 创建数据库 1. 语法格式 CREATE DATABASE 用于在 MySQL 中创建新的数据库,可以同时指定字符集(编码格式)和校验规则。 12CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARACTER SET 字符集名] [DEFAULT COLLATE 校验规则];CREATE DATABASE [IF NOT EXISTS] 数据库名 [[DEFAULT] CHARSET=字符集名] [[DEFAULT] COLLATE=校验规则]; 其中带 [] 表示可选项,不写就会自动选择默认的配置。sql 语句也可以使用小写,会自动识别!在之后的讲解中,我会尽量使用多种写法来展示同一条 sql 语句的效果。 参数详解: 参数 说明 IF NOT EXISTS 如果没有就创建,如果已有同名的则报错:提示无法创建,因为已存在 DEFAULT CHARACTER SET 指定数据库的默认字符集(如 utf8、utf8mb4 等) DEFAULT COLLATE 指定校验规则,即字符串比较、排序方式 ...
数据链路层 数据链路层协议 ——— 以太网协议 | CSDN 「网络编程」数据链路层协议_ 以太网协议学习 | CSDN 1. 对比理解 MAC 地址和 IP 地址 1. 通俗类比:寄快递的两步走 假设你要从北京家里寄一个文件到上海朋友家,整个过程对应两层的分工: 层级 类比角色 负责的环节 数据链路层 你家楼下的快递员 只负责 “本地最后一公里”:从你手里接过文件(数据),封装成 “本地快递袋”(帧),送到小区门口的 “物流站点”(路由器);不关心文件最终去哪,只认 “你家的门牌号”(MAC 地址)。 网络层 全国物流调度中心 负责 “跨区域全局路由”:从物流站点接过快递袋,拆开看 “目的地地址”(IP 地址),规划从北京到上海的路线(比如北京 → 济南 → 南京 → 上海),把快递转到下一个站点,直到送到上海的物流站点;不关心 “最后一公里怎么送”,只管 “跨区域怎么到目标城市”。 简言之: 数据链路层:管 “邻居间” 的本地传输(比如你家电脑 ↔ 路由器、路由器 ↔ 隔壁路由器)。 网络层:管 “跨网络” 的全局路由(比如北京内网 ↔ 上海内网、家里 ...
Linux
未读网络层 —— IP 协议 网络层协议 ——— IP 协议 | CSDN 网络层 IP 协议 | CSDN 为什么大家的 IP 都是 192.168 开头的?| B 站(荐) 【硬核科普】IP 地址是什么东西?IPV6 和 IPV4 有什么区别?公网 IP 和私有 IP 又是什么?| B 站(荐) 1. IP 地址的本质:网络号 + 主机号 IP 地址由两部分组成: 部分 作用 举例 网络号 (Network ID) 表示属于哪个子网 192.168.10.0 主机号 (Host ID) 表示子网内的哪台主机 192.168.10.15 规律: 同一子网内:网络号相同,主机号不同。 不同子网:网络号不同,主机号可以重复。 举例: 子网 A:192.168.1.0/24 子网 B:192.168.2.0/24 两个子网的主机号范围都可是 1–254,不冲突,因为网络号不同。 2. IP 地址划分基础 1. 划分目的 根本目的就是为了高效管理、节省地址、提升安全和性能。 最初,互联网只分为 A、B、C 类地址(分类地址),但从 1993 年起,RFC ...
Linux
未读传输层 —— TCP(下) 30 张图解: TCP 重传、滑动窗口、流量控制、拥塞控制 | 博客园 1. TCP 流量控制 1. 什么是流量控制? 先想一个比喻:你在和朋友聊天,对方打字太快,你还没看完一句他又发十条,你就“被淹没”了。TCP 里也一样,发送方(Sender)发数据太快,而接收方(Receiver)处理不过来,就会导致: 接收缓冲区溢出(数据丢失) 重传、拥塞、效率下降 所以 TCP 设计了 流量控制机制(Flow Control),让接收方告诉发送方:“我现在只能接收这么多数据,请你慢一点。”它是一种防止发送方发送数据过快,导致接收方来不及处理而造成数据丢失的机制,其核心目标是 匹配发送速率与接收能力。 2. 实现方式:接收窗口 TCP 报文头部包含一个 16 位的窗口字段(Window Size),表示接收方当前还能接收多少字节的数据(即接收缓冲区剩余空间)。发送方根据这个窗口大小决定最多能发送多少未确认的数据。如果接收方缓冲区快满了,它会通告一个较小的窗口;如果缓冲区空了,就通告一个较大的窗口(甚至为 0)。 高性能 TCP 扩展 注意:窗口大小字段最 ...
从 Centos 切换到 Ubuntu 1. 前言 Centos 是一个不错的发行版,但是它的各个版本都已经停止维护了。CentOS 7 于 2024 年 6 月 30 日正式停止支持,CentOS 8 更是早在 2021 年 12 月 31 日就停止维护了。而且后续学习中不支持部分软件版本,从长远使用、学习、生态等多方面考虑,将其切换到 Ubuntu 是不错之举。 其实从一开始就直接接触 Ubuntu 也是不错的选择,但这些都是后话了,各有优劣吧。从 Centos 切换到 Ubuntu 的朋友可以体验到不同系统的优劣,直接使用 Ubuntu 倒是可以省去一些小麻烦,但归根结底,二者基本可以做到无缝互通,命令大差不差,遇到不一样的简单查一下就行了。下面开始教学如何从 Centos 切换到 Ubuntu,基本上比较简单,少部分涉及 Centos 的一点基础。 2. 系统切换 到自己的云服务器厂商后台找到切换镜像,选择 Ubuntu 22.04 版本进行安装,几分钟后就会完成,注意完成后要重新设置密码! 重要提醒:切换系统前一定要备份好重要数据,系统切换会清空所有数据! 3. 使用 Xsh ...











