中国开发网: 论坛: 程序员情感CBD: 贴子 66276
GoodHope
我受不了了!!!
猪啊!!!

首先将文件划分为小块,不同的现成下载不同的段。每段包括1到n个块,各段收尾相连。如果各线程速度近似,则基本同时完成。这些操作可以在缓存中完成,当有顺序的数据进入的时候,就添加到结尾。然后,从以上各段最末尾之处开始新一轮循环。如果各段速度差异较大,则要考虑段、块之间动态的关系了,使得缓存消耗最小。

但是这样需要频繁调整下载起点,在高速传输的时候,效率较低。针对大文件,也可以根据传输速度来调整段甚至是块的大小可以缓解一部分性能损失,但是总的来说效率还是较一些。

如果假设ADSL总下载速度为200K,每个任务5线程下载。由于受ADSL带宽限制,多任务意义不大,只考虑单任务情况(多任务,各个线程速度合并其实是一码事),则每线程总速度40KB/s。因为有一线程本身就是在末尾添加,不需要缓存,则需要缓存4线程数据。开4M缓存可以缓存25s的数据,开10M缓存就可以缓存1分多钟。1分钟切换一次位置,这个性能损失还算可以接受。如果各任务共用缓存,则增加任务几乎不增加缓存开销。

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录