前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GRPC-C++源码分析(七)--ServerCompletionQueue续

GRPC-C++源码分析(七)--ServerCompletionQueue续

原创
作者头像
路小饭
修改2019-04-22 17:20:08
1.4K0
修改2019-04-22 17:20:08
举报
文章被收录于专栏:C++开源框架源码分析

3.2.1 cq初始化

代码语言:txt
复制
cq = static_cast<grpc_completion_queue*>(
      gpr_zalloc(sizeof(grpc_completion_queue) + vtable->data_size +
                 poller_vtable->size()));
  • vtable->data_size为 sizeof(cq_next_data)
  • poller_vtable->size为 grpc_pollset_size

稍微解释下grpc_pollset_size:

代码语言:txt
复制
size_t grpc_pollset_size(void) { return grpc_pollset_impl->pollset_size(); }
  • 这里的grpc_pollset_impl的值来自2.1.2节 grpc_determine_iomgr_platform中定义的方法grpc_set_pollset_vtable
  • grpc_pollset_impl->pollset_size()调用的是下面代码中的pollset_size
代码语言:txt
复制
//ev_posix.cc
  grpc_pollset_vtable grpc_posix_pollset_vtable = {
    pollset_global_init, pollset_global_shutdown,
    pollset_init,        pollset_shutdown,
    pollset_destroy,     pollset_work,
    pollset_kick,        pollset_size};
  • 蛋疼的是这还不算完事儿,pollset_size也是个方法
代码语言:txt
复制
static size_t pollset_size(void) { return g_event_engine->pollset_size; }
  • 是不是终于看到了熟悉的面孔:g_event_engine,是的,它就是2.1.4节 grpc_iomgr_platform_init方法后得到的全局变量
  • 所以最终 grpc_pollset_size的取值是sizeof(grpc_pollset)
代码语言:txt
复制
//ev_epollex_linux.cc
static const grpc_event_engine_vtable vtable = {
    sizeof(grpc_pollset),//第一个
    ………………

3.2.2 vtable的初始化

先来看第一句:

代码语言:txt
复制
poller_vtable->init(POLLSET_FROM_CQ(cq), &cq->mu);
  • POLLSET_FROM_CQ本质是个grpc_pollset* pollset,指向的是cq额外开辟的空间

  • 可以这样理解,poller_vtable->init其实是在初始化cq中的grpc_pollset
  • 箭头3中又遇到了3.2.1节中老朋友grpc_pollset_impl,所以调用关系参看上图就可以了
  • poller_vtable->init最终调用的是ev_epollex_linux.cc文件中的pollset_init方法

再来看第二句

代码语言:javascript
复制
vtable->init(DATA_FROM_CQ(cq), shutdown_callback);

  • 没啥好说的,代码很清晰

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.2.1 cq初始化
  • 3.2.2 vtable的初始化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档