BT算法汇总.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
BT算法汇总

BT 算 法 最稀有算法 最佳无阻塞算法 防冷落算法 结束算法 超级种子算法 最稀有算法 注解: BT中下载piece策略为,最稀少最优先原则。每个peer都优先选择整个系统中最少的那些片断去下载,而那些在系统中相对较多的片断,放在后面下载,这样,整个系统就趋向于一种更优的状态。如果不用这种算法,大家都去下载最多的那些片断,那么这些片断就会在系统中分布的越来越多,而那些在系统中相对较少的片断仍然很少,最后,某些 peer 就不再拥有其它 peer 感兴趣的片断了,那么系统的参与者越来越少,整个系统的性能就下降。客户端通过保留每个peer端的原始bitfield域来决定下载在bitfield里面出现频率最小的piece。程序的具体实现是通过 have 消息来计算。在下载过程中,会不停的收到其它 peer 发来的 have 消息,每个have消息都表明对方拥有了某个片断(即某个完整的piece)。那么,为每个片断维护一个计数器,每收到一个have消息,相应的计数器加1。在选择片断的时候,计数器最小的某个片断被选中。 “最少优先”的一个例外是在下载刚开始的时候。此时,下载者没有任何片断可供上传,所以,需要尽快的获取一个完整的片断。而最少的片断,通常只有某一个peer拥有,所以,它可能比多个peers都拥有的那些片断下载的要慢。因此,第一个片断是随机选择的,直到第一个片断下载完成,才切换到“最少优先”的策略。 该算法主要存在于:PEPeerControlImpl.java 1 计算可用性: Line 873:private void computeAvailability() 功能:计算包括本机拥有的下载任务中所有的pieces可用性 内容: 重置整形数组availability,长度为另一个整形数组_availability的长度 Arrays.fill(availability,0) 对于下载任务中的所有连接进行相同操作 for(int i=_peer_transports.size-1;i=0;i--) 将与client的第i个连接付给pc 得到该pc对应的peer拥有piece的可用性布尔变量数组piecesAvailable 如果此数组piecesAvailable不为空: 遍历任务中所有pieces,若在pc中可用,则将对应piece的可用性加1 加入本机拥有piece的可用性 将availability复制到_availability: System.arraycopy(availability, 0, _availability, 0, availability.length) 备注:类System中的成员方法arraycopy: public static void arraycopy(Object src,int src-position,Object dst,int dst-position,int length) 2 得到最小可用性: line 1641:public float getMinAvailability() { int total = 0; int nbPieces; // piece数目 int allMin; synchronized (_availability) { // 可用性整形数组:private int[] _availability; nbPieces = _availability.length; //得到piece数目 if (nbPieces == 0) return 0; allMin = _availability[0]; for (int i = 0; i nbPieces; i++) { if (_availability[i] allMin) allMin = _availability[i]; } for (int i = 0; i nbPieces; i++) { if (_availability[i] allMin) total++; } } return allMin + (total / (float)nbPieces); } 功能:得到所有piece中出现的最小频率值 内容: 定义变量: private int[] _availability; 可用性数组 int total=0; int allMin; 一个保存出现频率最小的piece的频率值 int nbPiec

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档