簡體   English   中英

ZeroMQ-線程數

[英]ZeroMQ - Number of Threads

問題1:使用ZeroMQ時創建了多少個線程?

根據( $ ps -o nlwp <pid> ),以下程序創建3個線程。

問題2:為什么?

Q3:難道這不是2個(給定num_zmq_io_threads == 1 ,一個用於主線程,一個用於I / O線程)?

問題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;
}

除了需要的I / O線程數量外,ZeroMQ將創建一個收割線程來處理套接字關閉。 如果您要求零個I / O線程(僅使用進程內消息時可能),那么仍然會有一個收割線程。 這就是為什么您似乎獲得比請求多的線程的原因。

未創建套接字時看不到線程的原因是ZeroMQ不在context創建時創建線程。 它們是稍后創建的。 這一點在ZeroMQ C API中更加明顯,在使用zmq_ctx_new()創建上下文時沒有任何選擇,然后在使用zmq_ctx_set()創建上下文之后必須指定諸如I / O線程的編號和優先級之類的選項。

創建套接字會觸發ZMQ創建線程。 我不知道確切的ZMQ創建線程的時間在哪里記錄。 即,在context創建第一個套接字時,它是否總是創建所有線程? 例如,它是否取決於創建的套接字何時對線程執行一些I / O操作?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM