C++服务器开发精髓2021(张远龙著)

书: https://pan.baidu.com/s/15VfTw9eJ2MoiHktwswP0gw?pwd=tq5x
笔记如下:

一、高性能架构设计

  1. “服务器开发的黄金准则:少锁或无锁(Lock-free)设计 > 细粒度锁 > 粗粒度锁,避免线程争用。”
  2. “Reactor模式是高性能网络框架基石:单线程事件循环 + 非阻塞I/O + 多线程计算,Nginx/Redis均基于此。”

二、网络编程核心

  1. “Epoll的ET(边缘触发)模式必须一次性读完数据,LT(水平触发)更易编程但效率略低。”
  2. “TCP粘包问题解决:定长包头(长度字段) + 自定义协议,而非依赖\n等分隔符。”
  3. “Zero-Copy技术(sendfile/splice)减少内核态-用户态数据拷贝,提升文件传输吞吐量。”

三、内存管理

  1. “内存池(Memory Pool)预分配大块内存,避免频繁malloc/free导致的碎片与性能抖动。”
  2. “智能指针的陷阱:shared_ptr的循环引用需用weak_ptr打破,原子操作带来额外开销。”

四、并发编程

  1. “线程池任务队列的无锁实现(CAS原子操作)比互斥锁(mutex)吞吐量高10倍以上。”
  2. “线程局部存储(TLS)解决全局变量竞争问题,但需注意线程销毁时的资源释放。”

五、性能优化

  1. “CPU Cache友好性:顺序访问数组比随机访问链表快100倍,分支预测失败代价高昂。”
  2. perf工具定位热点函数:perf top -p <pid>实时查看CPU占用最高的符号。”

六、协议设计

  1. “二进制协议(Protobuf/FlatBuffers)比JSON解析快10倍,但牺牲可读性。”
  2. “HTTP/2的多路复用(Multiplexing)解决队头阻塞,gRPC基于此构建高效RPC。”

七、稳定性保障

  1. “心跳机制(Keepalive)检测连接存活,超时重连需配合指数退避(Exponential Backoff)。”
  2. “核心转储(Core Dump)分析:gdb -c core.<pid>定位崩溃时的调用栈与变量值。”

八、容器化与云原生

  1. “容器内进程的CPU绑定(CPU Affinity)避免跨NUMA节点访问内存的性能损失。”

九、调试与日志

  1. “日志分级:DEBUG(调试)→ INFO(运维)→ ERROR(告警),异步写入避免阻塞主线程。”

十、设计哲学

  1. “服务端C++的RAII(资源获取即初始化)原则:构造函数获取资源,析构函数释放,杜绝泄漏。”
  2. “微服务拆分边界:按业务能力而非技术层级,避免‘分布式单体’。”
  3. “性能与可维护性的平衡:先正确,再快速,最后优雅——优化需以 profiling 数据为准。”

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注