女生说cpy什么意思啊


Ryan Dahl最初选择了golang作为开发语言,但后来将其从deno中移除。几天前,Protobuf的开发者Kenton Varda提出了一个问题,他对Deno使用Protobuf作为进程间通信方式的选择感到惊讶。Kenton指出,虽然Protobuf提供了向后兼容性和紧凑的编码表示,但这对于Deno来说并无太大的优势,相反,每次都需要序列化和反序列化,这在I/O操作中似乎是一个很大的开销。

关于Cap’n Proto的性能问题:

Kenton Varda离开Google后开发了Cap’n Proto。关于Cap’n Proto与Protobuf的性能对比,上给出了一个对比图,显示Cap’n Proto的编码解码速度是Protobuf的8倍。但实际上,这个对比有些标题化的嫌疑。因为Cap’n Proto的编码数据是直接存储在内存中的,不需要像Protobuf那样进行编码和解码。这使得它的数据结构在内存中的布局和使用保持一致,因此可以直接将编码后的结构存储到硬盘或通过网络传输。

关于Cap’n Proto的编码是否是特定于平台的这一问题,答案是它的编码方案是独立于任何平台的,但在主流的通用CPU上会有更好的性能。它的数据方式类似于编译器对struct的处理方式,有固定宽度、固定偏移和内存对齐等特点。对于可变的数组元素,它使用指针,并且这些指针也是使用偏移量来存储,而不是绝对地址。整数使用小端序存储,这也是大多数现代CPU的默认设置。

关于序列化与反序列化:

Protobuf在每次传输时都会创建一个表示message的对象,并将其序列化为ArrayBuffer。接收方则需要从缓冲区读取message,然后解析为一个对应的对象以供后续使用。而Cap’n Proto的消息结构直接存储在ArrayBuffer上,当我们调用message.setFoo(123)时,实际上就是在直接操作内存中的某个位置。这种方式的优点在于减少了序列化和反序列化的开销。Protobuf可以使用变宽编码以节省空间,而Cap’n Proto则更注重性能,将整数编码为固定宽度并用零填充额外的字节空间。当带宽成为问题时,无论是哪种编码格式,都应该考虑对消息体进行压缩。

关于FlatBuffers和Deno的安全问题:

Deno的作者在讨论中也提到了FlatBuffers。关于安全性的讨论也展开了一些关于TOCTOU漏洞的内容。在同一缓冲区中,当不同的线程同时操作时,需要采取措施防止此类漏洞的出现。为了安全而牺牲性能是一种常见的设计策略。关于基准测试的态度:Kenton Varda强调真正的基准测试需要在实际应用程序中进行比较,而不仅仅是简单的性能测试。这需要大量的工作并且几乎没有人做过。至于Deno的安全性探索,作为一个新兴的项目,它正在不断学习和成长中。例如为了防止TOCTOU漏洞的出现而做出的尝试和努力在后续的开发过程中可能需要持续不断的调整和改进以保障系统的安全性。程序员都在关注的开源项目真相大揭秘 关于本文中提到的基准测试确实是一大工程挑战但Deno作为一个新生项目仍然值得我们去关注和学习其源码和commit以见证其成长和发展过程。真相揭秘时刻