ZeroMQ - 线程数

时间:2015-01-10 02:28:34

标签: c++ zeromq

Q1:使用ZeroMQ时创建了多少个线程?

根据( $ ps -o nlwp <pid> 的输出),以下程序创建3个线程。

Q2:为什么?

问题3:这不应该是2(一个用于主要,一个用于I / O线程,给定num_zmq_io_threads == 1

问题4:这是否记录在任何地方?

#include <zmq.hpp>

int main( int argc, char * argv[] )
{
    const int num_zmq_io_threads = 1;        
    zmq::context_t context( num_zmq_io_threads );

    zmq::socket_t socket1( context, ZMQ_PUB );
    socket1.bind( "tcp://127.0.0.1:5555" );

    for(;;)
    {
        // spin
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

除了要求的I / O线程数之外,ZeroMQ还将创建一个reaper线程来处理套接字关闭。如果你要求零I / O线程,那么当只使用intra-processess消息时,仍然会有一个收割者线程。这就是为什么你似乎得到了一个比要求更多的线程。

在未创建套接字时看不到线程的原因是因为ZeroMQ在 context 创建时没有创建线程;它们是后来创建的。使用ZeroMQ C API时更明显,在使用zmq_ctx_new()创建上下文时没有选项,然后必须在使用{{创建上下文后 - 指定I / O线程的数量和优先级等选项3}}

创建套接字会触发ZMQ来创建线程。当ZMQ确切地创建线程时,我不知道它在哪里被记录。即,在context上创建第一个套接字时,它是否总是创建所有线程,还是比它更复杂?例如,它取决于创建的套接字何时具有一些线程执行的I / O操作?