- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- ZXR10 M6000电信级路由器硬件手册.docx VIP
- 《输液导管相关静脉血栓形成防治中国专家共识》解读PPT课件.pptx VIP
- 高中英语_Being funny without saying a word教学课件设计.ppt
- 2024版育婴师培训全套课件完整版.docx VIP
- 子网掩码相关教学 子网掩码快速算法.doc VIP
- 什么什么踏地四字成语.docx VIP
- 力士乐卷扬减速机制动器安装拆解图文.pdf VIP
- 新能源汽车充电系统检修:车载充电机的认知与检修PPT教学课件.pptx
- 2025年度食品安全风险日管控、周排查、月调度记录表.pdf VIP
- (新版)消防设施操作员(初级)消防设施操作-考试题库(含答案).docx VIP
文档评论(0)