零拷贝听上去很美:不用反序列化,直接读字节。真用起来你会发现,它把复杂度从 CPU 转移到了人的身上。

三种方案对照

在同一份 12KB 的载荷上,我们对比了 JSON、FlatBuffers 和自研的定长布局:

  • JSON:写起来最快,解析 41 微秒,内存分配最多;
  • FlatBuffers:读取 0.6 微秒,但写入端的代码量翻了三倍;
  • 定长布局:读取 0.2 微秒,代价是数据结构完全不能随便改。

坑在哪

最大的坑是schema 演进。零拷贝方案一旦字段顺序或类型变动,新旧版本的数据就对不上,而且这种错误不会在编译期暴露。

第二个坑是调试。你没法直接把一段字节打印成人能看的东西,排查问题的成本明显变高。

什么时候值得用

只有当这段解析出现在真正的热路径上、并且有压测数据证明它是瓶颈时才值得。其他情况下,可读性的价值远高于那几十微秒。