PROJECT FOLIO06

Tide Stack

潮汐栈

从一次 echo 开始,沿着连接、事件、缓冲和定时器,亲手理解网络服务器的流动方式。
  • C++
  • kqueue
  • Non-blocking IO
  • Buffer
  • Thread Pool
向内翻阅
PROJECT CONTENTS潮汐栈篇内目录
  1. 06.01卷首:事件像潮水一样抵达
  2. 06.02命题:抽象隐藏了什么
  3. 06.03图版:kqueue 事件潮汐
  4. 06.04图版:Buffer 可读写长带
  5. 06.05对照:消失的中间数组
  6. 06.06图版:compact 与 resize
  7. 06.07演进:五阶段网络服务器
  8. 06.08故障:跨事件状态为何重要
  9. 06.09证据:线程、连接与拷贝
  10. 06.10尾声:重新看见边界
PROPOSITION问题命题

网络框架看似由现成抽象组成,但只有自己处理短读、半包、非阻塞状态、连接生命周期和缓冲区边界,才能真正理解事件循环为何可靠。

KQUEUE1 THREAD
FIG. 06.1多连接进入单线程事件循环
SYSTEM ANATOMY系统全貌
01

连接基础

从监听、接受、收发与关闭开始,逐步消除隐藏状态和错误文件描述符。

02

事件循环

使用 kqueue 让单线程管理多个活跃连接,由内核通知真正可读的文件描述符。

03

读写缓冲

可读写指针、compact 与扩容策略替代裸数组,并让数据直接进入 Buffer。

04

时间与并发

定时器和线程池继续扩展事件模型,同时保留可观察、可测试的边界。

READ INDEXWRITE INDEXCONSUMEDREADABLEWRITABLE
FIG. 06.2Buffer 可读区与可写区
HARD DECISIONS最难的决定
DECISION 01

为什么 Buffer 必须跨事件存在

一次 recv 不保证得到完整消息。缓冲状态如果是事件循环局部变量,下一次可读事件就会失去未消费数据。

DECISION 02

为什么先 compact 再扩容

已消费空间应优先回收,只有连续可写区仍不足时才增长底层容器,避免无意义内存膨胀。

KERNELTEMPBUFFERKERNELBUFFERREMOVED COPY
FIG. 06.3零中间数组数据流
EVIDENCE留下的证据
1事件线程
0中间 recv 数组
N并发连接
5演进阶段
USEDUNREADFREEUNREAD COMPACTEDWRITABLE
FIG. 06.4compact 与 resize 内存变化
ECHOSERIALKQUEUESOCKETBUFFER12345
FIG. 06.5五阶段实现演进

EPILOGUE / 尾声

潮汐栈不是为了重新发明成熟框架,而是用一层层可运行实现,把网络编程中最容易被库隐藏的边界重新看见。
关于本书
ABOUT THIS BOOK

每个符号都应该有来源。

BarbaraX 是本站公开署名;其中 X 表示未知量、未来章节和仍可扩展的构建空间。

封面六枚藏书票依次来自:关系节点、对话、证据棱镜、激光扫描、OCR 取景框和 Buffer 数据带。

项目内容来自本地 README、架构、测试和性能文档;不复制密钥、用户数据或私有产物。

中文使用思源宋体子集,边注使用 IBM Plex Mono,手写字标由 Ma Shan Zheng 轮廓生成;字体均采用 SIL OFL 1.1。