
书: https://pan.baidu.com/s/15VfTw9eJ2MoiHktwswP0gw?pwd=tq5x
笔记如下:
一、高性能架构设计
- “服务器开发的黄金准则:少锁或无锁(Lock-free)设计 > 细粒度锁 > 粗粒度锁,避免线程争用。”
- “Reactor模式是高性能网络框架基石:单线程事件循环 + 非阻塞I/O + 多线程计算,Nginx/Redis均基于此。”
二、网络编程核心
- “Epoll的ET(边缘触发)模式必须一次性读完数据,LT(水平触发)更易编程但效率略低。”
- “TCP粘包问题解决:定长包头(长度字段) + 自定义协议,而非依赖
\n
等分隔符。” - “Zero-Copy技术(
sendfile
/splice
)减少内核态-用户态数据拷贝,提升文件传输吞吐量。”
三、内存管理
- “内存池(Memory Pool)预分配大块内存,避免频繁
malloc/free
导致的碎片与性能抖动。” - “智能指针的陷阱:
shared_ptr
的循环引用需用weak_ptr
打破,原子操作带来额外开销。”
四、并发编程
- “线程池任务队列的无锁实现(CAS原子操作)比互斥锁(mutex)吞吐量高10倍以上。”
- “线程局部存储(TLS)解决全局变量竞争问题,但需注意线程销毁时的资源释放。”
五、性能优化
- “CPU Cache友好性:顺序访问数组比随机访问链表快100倍,分支预测失败代价高昂。”
- “
perf
工具定位热点函数:perf top -p <pid>
实时查看CPU占用最高的符号。”
六、协议设计
- “二进制协议(Protobuf/FlatBuffers)比JSON解析快10倍,但牺牲可读性。”
- “HTTP/2的多路复用(Multiplexing)解决队头阻塞,gRPC基于此构建高效RPC。”
七、稳定性保障
- “心跳机制(Keepalive)检测连接存活,超时重连需配合指数退避(Exponential Backoff)。”
- “核心转储(Core Dump)分析:
gdb -c core.<pid>
定位崩溃时的调用栈与变量值。”
八、容器化与云原生
- “容器内进程的CPU绑定(CPU Affinity)避免跨NUMA节点访问内存的性能损失。”
九、调试与日志
- “日志分级:
DEBUG
(调试)→INFO
(运维)→ERROR
(告警),异步写入避免阻塞主线程。”
十、设计哲学
- “服务端C++的RAII(资源获取即初始化)原则:构造函数获取资源,析构函数释放,杜绝泄漏。”
- “微服务拆分边界:按业务能力而非技术层级,避免‘分布式单体’。”
- “性能与可维护性的平衡:先正确,再快速,最后优雅——优化需以 profiling 数据为准。”