似乎有两种主要方法可以在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
}
}
如果我只有一个我想要阅读的套接字,是否有令人信服的理由我应该选择使用zmq_poll
而非zmq_recv
ZMQ_NOBLOCK
的版本?
答案 0 :(得分:2)
如果不使用zmq_recv(&msg, ZMQ_NOBLOCK)
zmq_poll
通常你会在循环中阅读;
while (!done) {
...
zmq_recv(&msg, ZMQ_NOBLOCK);
...
}
这是一个忙碌的等待,它不必要地使用CPU。 zmq_poll()
阻塞,并且在等待某事发生时不消耗CPU。
如果你只有一个套接字,并且不想使用zmq_poll,你通常会使用阻塞zmq_recv
,并设置一个ZMQ_RCVTIMEO,这样你就不会在发送时出现问题而永久阻止侧。