当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 客户端源码分析之四:PiecePicker 类 LOR: blu
 

 

    摘要: 成员函数指针与高性能的c++委托(上篇) member function pointers and the fastest possible c++ delegates 撰文:don clugston 翻译:周翔 引子 标准c++中没有真正的面向对象的函数指针。这一点对c++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它......
 ·为什么flush不生效?    »显示摘要«
    摘要:老早就看了这篇文章: 类似socket传输的flush() 非常简单的代码,却总是不能在我的服务器上正常运行,如下:代码片段: for($i = 1; $i 500; $i++)print " ";????ob_implicit_flush();????for($j = 1; $j 30; $j++) {????echo $j."";????sleep(1)......


客户端源码分析之四:PiecePicker 类
客户端源码分析之四:piecepicker 类

日期:2004-7-2 【程序编程相关:如何嵌入(Docking)一个工具条(H

作者:小马哥 【推荐阅读:如何在工具栏中,加上图标和文字?(How

版权所有,未经允许,不得转载 【扩展信息:如何分屏幕(How to split t

rstevens at hotmail.com

 

piecepicker 用于实现“片断选择算法”,片断选择算法在«incentives build robustness in bittorrent»一文中有介绍,我把相关内容列出来.

 

bt的片断选择算法,综合下面几种策略.

 

l         严格的优先级

    片断选择的第一个策略是:一旦请求了某个片断的子片断,那么该片断剩下的子片断优先被请求.这样,可以尽可能快的获得一个完整的片断

 

l         最少的优先

    每个peer都优先选择整个系统中最少的那些片断去下载,而那些在系统中相对较多的片断,放在后面下载,这样,整个系统就趋向于一种更优的状态.如果不用这种算法,大家都去下载最多的那些片断,那么这些片断就会在系统中分布的越来越多,而那些在系统中相对较少的片断仍然很少,最后,某些 peer 就不再拥有其它 peer 感兴趣的片断了,那么系统的参与者越来越少,整个系统的性能就下降.

 

l         随机的第一个片断

    “最少优先”的一个例外是在下载刚开始的时候.此时,下载者没有任何片断可供上传,所以,需要尽快的获取一个完整的片断.而最少的片断,通常只有某一个peer拥有,所以,它可能比多个peers都拥有的那些片断下载的要慢.因此,第一个片断是随机选择的,直到第一个片断下载完成,才切换到“最少优先”的策略.

 

l         最后阶段模式

    有时候,从一个速率很慢的peer那里请求一个片断.在下载的中间阶段,这不是什么问题,但是却可能潜在的延迟下载的完成.为了防止这种情况,在最后阶段,peer向它的所有的peers们都发送某片断的子片断的请求,一旦某些子片断到了,那么就会向其它peer发送cancel 消息,取消对这些子片断的请求,以避免带宽的浪费.实际上,用这种方法并没有浪费多少带宽,而文件的结束部分也一直下载的非常快.

 

下面是我在分析之前思考的两个问题:

 

问题1:如何实现“严格优先级”

答案:记录每个已经开始下载的片断.优先选择它们.

 

问题2:如何实现“最少优先”算法?也就是你如何去统计某个片断在系统中最少?

答案:通过 have 消息(have消息请参看bt对等协议)来计算.在下载过程中,会不停的收到其它 peer 发来的 have 消息,每个have消息都表明对方拥有了某个片断.那么,为每个片断维护一个计数器,每收到一个have消息,相应的计数器加1.在选择片断的时候,计数器最小的某个片断被选中.

 


...   下一页
 ·pear帮助手册的chm版    »显示摘要«
    摘要:在pear的站点上看到有chm版本的手册下载了,我想这东东以后会和php手册,mysql手册,js手册一起,常备俺的案头,时时不忘拿出来翻阅一番: 下载地址 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE