Windows API 学习笔记(2) 线程与内存管理 线程与内存管理 线程相关CreateThread / OpenThread通过这两个函数获取线程句柄. 前者可以用C++11的 thread 库代替. 后者传入对应的线程tid, 返回对应的线程句柄. 线程句柄的作用 使用TerminateThread直接终止线程. 使用WaitForSingleObject等待线程结束. 使用 SuspendThread/ResumeThrea 2025-09-07 #WindowsAPI #线程 #内存管理
Windows API 学习笔记(1) 类型和进程 学习目标 : 主要在于学习怎么用C/C++使用Windows操作系统, 不学界面, 只学底层, 比如内存管理, 线程, 系统信息调用, 网络编程相关. 类型和进程 Windows类型 Windows类型 等效C/C++类型 大小 用途 BYTE unsigned char 1字节 二进制数据、字节流 WORD unsigned short 2字节 16位无 2025-09-04 #WindowsAPI #进程
C++线程级异步 asyncasync做到的只是简单的线程级异步, 并非像boost:asio那样的内核级异步, 其优势大概也就是简单了. 因此只适合做一些简单的异步任务, 但是其功能和线程池重合, 如果使用了线程池就没有必要使用async了. 1234// 启动异步任务std::future<int> fut = std::async(compute, 10, 20);// 获取结果(会阻塞直到结果可 2025-09-03 #异步
C++编译链接模型精要 C编译链接系统 先来回顾C语言的编译流程 : 预处理 -> 编译 -> 汇编 -> 链接 Preprocessor 预处理 输入 .c / .cc 文件 输出 .i (intermediate 中间) 文件 工作 : 将include字段用对应的.h文件替换 替换define字段 处理条件编译 删除注释 Compiler 编译 输入 .i 文件 输出 .s 2025-08-10 #编译链接 #C++20模块
HTTP/3 生态分析TCP队头阻塞这是HTTP/2所拥有的根本性通病, 注意这里的队头阻塞不是指排队造成的阻塞, 而是指丢包造成的阻塞. TCP为了实现可靠有序, 采用了超时重传机制, 该机制可以确保可靠有序, 但是对于现代网络却有严重缺陷. TCP中如果发送出现丢包, 必须要依靠超时重传等到当前包再次发来, 后面的包才能生效, 即使已经发来了, 后面的包也不能及时处理和使用, 这是在内核中就强制决 2025-08-05 #HTTP
HTTP/2 分为两部分 : 理论知识 和 nghttp2库使用 理论知识可以理解为在HTTP/1.1上做了很多精简优化的工作, 解决了很多冗余的部分, 实现了精细地控制. 提升了加载速度, 减少了连接资源的浪费, 避免的频繁的队头阻塞. 整体理解 依旧使用TCP进行数据传递, 但是一组请求响应不再会长时间占用整个TCP连接, 并且不同的请求都将始终在一条TCP连接上实现. 流机制和帧机制实现了上 2025-08-01 #HTTP
HTTP/1 HTTP/1.0短连接(非持久性连接) 每次HTTP请求都要创建一个新的TCP连接, 响应完就关闭连接. HTTP/1.1长连接, 使用最广泛的HTTP协议 keep-alive : 持久连接Connection: keep-alive : 表示复用已有的TCP连接连续发送多个请求, 不断开当前的TCP连接. Connection: close : 表示想确实关闭连接. 分块 2025-07-20 #HTTP
Linux多线程服务端编程 读书笔记3 工程实践经验谈 分布式系统 分布式系统不是放大了的单机系统, 根本原因在于单机没有部分故障. 单机与分布式的根本区别在于进程地址空间是一个还是多个. 负载均衡一般的解决方案是 : 通过某个集中的负载均衡器来收集并分发负载情况, 可以把消息数目降到M + N(M台web服务器, N台服务提供服务器). 但是这种方式会引发单点故障(Single Point of Failure), 最简单的 2025-07-16 #分布式系统
Linux多线程服务端编程 读书笔记2 第二部分 Muduo网络库 文件传输 如何完整高效地传输一个文件? 文件传输过程一般如下 : 磁盘 -> 内核页缓冲 -> 用户缓冲区 -> Tcp发送缓冲区 -> 网卡等 最简单的传输方式当然就是fread + send 一口气传出, 但是这样如果文件非常大的话, 服务器扛不住几个连接, 因为这样的内存消耗非常大. 书中提出了一种解决内存占用过多的方法 : 2025-07-14 #文件传输 #io_uring
Linux多线程服务端编程 读书笔记1 第一部分 C++多线程系统编程 析构所在的线程当share_ptr引用计数归零时, 会在归零的这个线程就地析构, 而这个线程不一定是对象诞生的线程. 这就引发出一个问题 : 如果对象的析构比较耗时, 且经常在关键线程触发析构, 就会拖慢关键线程的速度. 这种情况的解决方案是专门做一个阻塞队列存入要析构的智能指针, 另开一个专门析构的线程从队列中取出进行析构. 多线程适用场景 其核心作用在 2025-07-12 #多线程 #Muduo