Network programming 对一个套接字使用zmq_recv和zmq_NOBLOCK与zmq_poll
从ZeroMQ中的套接字异步获取数据似乎有两种主要方法:Network programming 对一个套接字使用zmq_recv和zmq_NOBLOCK与zmq_poll,network-programming,zeromq,nonblocking,Network Programming,Zeromq,Nonblocking,从ZeroMQ中的套接字异步获取数据似乎有两种主要方法: if(zmq_recv(&msg, ZMQ_NOBLOCK) == 0) { // could return EAGAIN or others // do stuff } ...and... if(zmq_poll(&pollItems[0], num, timeout)) { if(zmq_poll(&msg) == 0) { // do stuff } } 如果我只
if(zmq_recv(&msg, ZMQ_NOBLOCK) == 0) { // could return EAGAIN or others
// do stuff
}
...and...
if(zmq_poll(&pollItems[0], num, timeout)) {
if(zmq_poll(&msg) == 0) {
// do stuff
}
}
如果我只想从一个套接字读取数据,是否有一个令人信服的理由让我选择使用
zmq\u poll
的版本,而不是使用zmq\u NOBLOCK
的zmq\u recv
?如果不使用zmq\u poll
通常你会在一个循环中阅读
while (!done) {
...
zmq_recv(&msg, ZMQ_NOBLOCK);
...
}
这是一个繁忙的等待,它不必要地使用CPUzmq_poll()
阻塞,并且在等待事件发生时不消耗CPU
如果您只有一个套接字,并且不想使用zmq_poll,您通常会使用阻塞zmq_recv
,并设置zmq_RCVTIMEO,以便在发送端出现问题时不会永远阻塞