跳到主要内容
英文版本为准

本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。

数字

ruststream-zeromq 的基准测试数字测量的是什么,以及不能从中得出什么结论。

与裸客户端的对照​

一行中的三个循环彼此可比,因为它们在同一个进程中交替运行,使用同一种传输。一行不能与另一个 Broker crate 公布的行相比:那里的路径上有服务器,每条消息上各传输所做的工作也不同。

对端是同一进程里的套接字。没有网络也没有服务器,同样的每条消息开销在时间中所占的份额,比在两台主机之间更大。应把这个百分比理解为已部署服务所付开销的上界。

标为 无法区分 的额外开销,小于它所比较的两个循环各轮的波动范围。低于这个范围的数字会声称一种没有人测量过的精度,因此不打印。

代码的开销​

指令数包含本 crate 的代码、其上的运行时,以及 zeromq 客户端在服务线程上的组帧。同样的指令数在缓存未命中时花费更多时间,因此指令数不等于时间。

每个数字都是稳态,即 1000 条消息的运行与 2000 条消息的运行之差。启动服务、接受对端的连接以及其背后最初的内存分配属于冷启动,只付出一次。

它们不意味着什么​

一行是一个消费者、一个队列、一个小消息体和同一进程中的一个对端。它测量的是一条消息在本 crate 内部的开销,而不是 ZeroMQ 能承载多少。

每个循环在线上放入同样的三帧,因为这是本 crate 文档化的布局,也是外部对端写出的布局。消息头帧发出时为空。发送消息头的服务在每条消息上还要付出本 crate 解析消息头的开销,这部分不在这里的数字中。

在这个传输上没有任何东西结算消息。经过本 crate 的两个循环仍然调用 ack,它回答 Unsupported,裸循环则没有可调用的东西。另一个 Broker 公布的行在计时窗口内包含真实的确认,而这一行不包含。

工作分区池、多个对端以及向许多订阅者的广播,各自回答不同的问题,对照测试不测量其中任何一个。代码图另外还统计了批处理器和 DEALER/ROUTER 上的回复。

这些数字是某一天、某一台机器的快照,构建信息记录在旁边。它们在专门留给这次运行的机器上手动重新测量:它们显示的差异小于共享机器的噪声。