首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在gRPC中,call_cq和notification_cq有什么不同?

在gRPC中,call_cq和notification_cq有什么不同?
EN

Stack Overflow用户
提问于 2018-07-20 12:36:46
回答 1查看 523关注 0票数 6

https://github.com/grpc/grpc/blob/master/examples/cpp/helloworld/greeter_async_server.cc#L91

        service_->RequestSayHello(&ctx_, &request_, &responder_, cq_, cq_,
                                  this);

这两次出现的cq_对我来说很奇怪,所以我深入研究了源代码,它引导我

https://github.com/grpc/grpc/blob/master/include/grpcpp/impl/codegen/service_type.h#L92

  void RequestAsyncUnary(int index, ServerContext* context, Message* request,
                         internal::ServerAsyncStreamingInterface* stream,
                         CompletionQueue* call_cq,
                         ServerCompletionQueue* notification_cq, void* tag) {
    server_->RequestAsyncCall(methods_[index].get(), context, stream, call_cq,
                              notification_cq, tag, request);
  }

那么call_cqnotification_cq有什么不同呢?使用差异完成队列的潜在用途/好处是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-04-01 02:21:35

当同样的问题被问到时,这里引用了grpc的google-groups论坛的一句话。https://groups.google.com/forum/#!topic/grpc-io/V4NAQ77PMEo

Notification_cq将取回指示呼叫已开始的标记。对该调用的所有后续操作(读取、写入等)都会报告回call_cq。对于大多数异步服务器,我的建议是使用相同的cq。你可能不会去的地方:

  1. 我们的同步API在幕后为每个调用创建一个cq ...所以它为notification_cq发布了一个通用的事件>队列,并且它的特定队列是call_cq。
  2. 如果你想要能够控制你何时接受来电,那么当你不接受来电时(通过暂停notification_cq)
  3. I'm上的轮询,确保人们可以想到其他人)。

这允许细粒度地控制哪些线程处理哪些类型的事件(基于它们正在轮询的队列)。例如,您可能有一个主线程轮询notification_cq,而工作线程轮询它们自己的call_cqs,或者类似的东西。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51435147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档