我正在研究一个将多个客户端rpc请求发送到多个节点的模型。启动这些请求的线程在异步框架(libuv)的循环上运行,该循环也在做其他事情,因此不能阻塞等待结果。
为此,我使用异步C ++客户端模型发送多个请求并将其绑定到CompletionQueue。然后需要检查CompletionQueue是否完成,而不会阻塞。
我知道CompletionQueue :: AsyncNext方法可用于指定截止日期,但未记录给出即时/过去截止日期时会发生什么。它会有效地允许您轮询CompletionQueue还是因为超过了期限而立即失败并返回?如果是第二种情况,是否还有其他已知方法可以轮询请求的完成情况?
答案 0 :(得分:0)
轮询完成队列块。直接在libuv线程中使用截止日期进行轮询可能并不理想。它可能会阻塞整个事件循环。相反,您可能想生成另一个专用于轮询的线程。如果它从Core中获取了任何事件,那么它将在libuv中注册一个回调来处理它。
即时截止日期可能会影响应用程序的性能。