在实现C++grpc异步客户端时,如何轮询CompletionQueue



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

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

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

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

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

最新更新