繁体   English   中英

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

[英]How to poll a CompletionQueue when implementing a C++ grpc async client?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM