0

带有 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

参考

  1. https://github.com/zeromq/czmq/tree/master/examples/security
4

0 回答 0