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