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

标签 c++ asynchronous client grpc

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

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

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

最佳答案

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

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

关于c++ - 实现 C++ grpc 异步客户端时如何轮询 CompletionQueue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60999785/

相关文章:

Python - 服务器和浏览器客户端

python - MongoDB Python 和 C++ 客户端 - 多个实例出错

c++ - 如何使 consteval 函数失败?

c++ - C++ 中的 sort() 函数

c# - 如何在异步多线程爬虫中锁定回调类?

c# - 为什么 HTTP 请求永远不会返回异步等待?

javascript - Gulp 如何知道异步相关任务何时完成(具体来说, 'gulp-connect' )?

ubuntu - LDAP 混合用户凭据

c - 为什么 inet_ntoa 总是返回错误的 IP 地址(套接字编程公司)

c++ - 从结构中引用对象的指针