带有 czmq 的 ZeroMQ 显示出一些令人担忧的性能。计时结果相差近 20 倍。具体来说,在以下示例中,测试时间范围从大约 7 毫秒到 150 毫秒!?
基于提供的czmq
“草原”[1] 测试示例,我向abcdefghijklmnopqrstuvwxyz
消费者发送了一个类似 1000x 的字符串。
有谁知道这可能是为什么?
最小、完整和可验证的示例
基于grasslands
示例。生产者和消费者分成不同的文件/进程。
主题
#include <czmq.h>
#include <sys/time.h>
#include <string>
#include <iostream>
int main (void)
{
struct timeval start, end;
// Create and bind server socket
zsock_t *server = zsock_new (ZMQ_PUSH);
zsock_set_linger(server, 10000);
zsock_bind (server, "tcp://*:9000");
// Set the string to send
const std::string s = "abcdefghijklmnopqrstuvwxyz";
// Timestamp start, send 1000x, timetamp end.
gettimeofday(&start, NULL);
for (int i=0; i<1000; ++i) {
zstr_send (server, s.c_str());
}
gettimeofday(&end, NULL);
printf("%06ld\n", (long) start.tv_usec);
printf("%06ld\n", (long) end.tv_usec);
zsock_destroy (&server);
return 0;
}
观察者
#include <czmq.h>
#include <stdio.h>
int main (void)
{
zsock_t *client = zsock_new (ZMQ_PULL);
zsock_connect (client, "tcp://127.0.0.1:9000");
while(1) {
char *message = zstr_recv (client);
printf("%s\n", message);
free (message);
}
zsock_destroy (&client);
return 0;
}
五次运行
$ pub
745709
868642
$ pub
487869
643882
$ pub
564730
572683
$ pub
865532
873030
$ pub
356007
500260
参考