实施C ++ grpc异步客户端时如何轮询CompletionQueue?

时间:2020-04-02 19:40:25

标签: c++ asynchronous client grpc

我正在研究一个将多个客户端rpc请求发送到多个节点的模型。启动这些请求的线程在异步框架(libuv)的循环上运行,该循环也在做其他事情,因此不能阻塞等待结果。

为此,我使用异步C ++客户端模型发送多个请求并将其绑定到CompletionQueue。然后需要检查CompletionQueue是否完成,而不会阻塞。

我知道CompletionQueue :: AsyncNext方法可用于指定截止日期,但未记录给出即时/过去截止日期时会发生什么。它会有效地允许您轮询CompletionQueue还是因为超过了期限而立即失败并返回?如果是第二种情况,是否还有其他已知方法可以轮询请求的完成情况?

1 个答案:

答案 0 :(得分:0)

轮询完成队列块。直接在libuv线程中使用截止日期进行轮询可能并不理想。它可能会阻塞整个事件循环。相反,您可能想生成另一个专用于轮询的线程。如果它从Core中获取了任何事件,那么它将在libuv中注册一个回调来处理它。

即时截止日期可能会影响应用程序的性能。

相关问题