Chord实现代码分析(二)

  
在前面的分析中,漏掉了对 chord 初始化的时候是第三个参数的分析,难怪觉得似乎少了些东西。对于 chord ,第三个参数是一个函数指针 ---- fingerroute::produce_vnode (对此的描述是 use fingers and successors )原来此方法是用于构建 fingertable 的,对于 chord 算法来说是相当关键的一部分。现在深入该函数进行分析,看看 chord 是如何初始化 fingertable 的。
调用该方法是在 chord 构造函数最后的那个循环里,通过调用函数返回了一个 vnode 。然后我们看到 fingerroute::produce_vnode 只有一句话,返回一个 fingerroute 的类指针,但是函数要求是返回 ref<vnode> ,而 fingerroute 也是被 refcounted 修饰的,因此这 2 者之间可以转化,但是怎么转化还没明白,如果后面需要在去做研究,先着重主要部分,除非遇到瓶颈了。回到代码,现在流程进入到 fingerroute 的构造函数里面, fingerroute 继承于 vnode_impl ,所以在 fingerroute 的初始化列表里首先调用了 vnode_impl 的构造函数。
vnode_impl 的构造函数里,首先初始化了 3 个变量( successors predecessors stabilizer )。在依次对这 3 个变量的构造函数进行分析。 1 succ_list :主要是初始化了一些变量,最后调用 locationtable pin 方法 2 次,目前还是没有明白这个 pin 是干嘛的,等明白之后应该在详细说明。 2 pred_list :所做的事情与前面 succ_list 类似,最后也是用到了 pin 。只是 pred_list 的里给 pin 的参数是负数,猜测可能就是相对于当前节点,正数部分是后继节点,负数部分是前驱节点。 3 stabilize_manager :主要也是对类成员的初始化,具体这些成员的用途待用到的时候再进行分析。该类主要是用于稳定方便的管理。在初始化了 3 个变量之后,调用 register_client 分别注册了后继和前驱,并增加了 vnode 数量,然后通过 addHandler 增加一个处理函数 vnode_impl::dispatch 。最后就是一些变量的初始化操作。
vnode_impl 初始化完成之后,又调用了 finger_table 的构造函数来初始化 fingers_ 成员。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值