多线程下载程序开发 征集线程数目随网速调节的方案

tianjiao85 2008-12-08 09:21:17
如题,最近写一程序,xp下测试,想最大限度利用多线程的优势,因为不知道该如何确定多线程数目,目前线程是越开越多,开了1000个左右(后续线程不能开启),
我想设计一中方案,随着网速自动调节线程的数量,当然是在这个网速水平下,开最大的线程数目,初涉多线程,请高手指点。感谢。
...全文
161 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiami_009 2011-01-03
  • 打赏
  • 举报
回复
点量Http、FTP多线程断点续传下载组件(下载DLL)的开发目的是让用户可以无需关心Http/FTP协议的具体细节,只需要几十行甚至几行代码,便可以实现一个功能完善的Http/FTP下载软件。点量Http/FTP下载组件(DLL)支持多线程、断点续传、显示详细下载过程、自动查找镜像网址、支持代理传输等完善的功能。

点量Http、FTP下载内核源码使用高效的c++代码编写,提供标准的动态链接库(DLL),可供C/C++、Delphi、C#、Java、VB等语言和各常用开发环境调用,让您完全像调用系统API一样的调用。

点量Http/FTP组件的功能简介:

标准Http和FTP下载支持:完全标准的Http和FTP协议支持,内部通过网址自动区分是Http还是FTP下载。
极速下载(2.0以后版本):超越国内绝大多数下载软件的下载速度。新版内核在2M ADSL的环境下下载,有些文件的速度可以达到1400K字节/秒以上,超过了带宽的极限。下载速度可以用极速形容。
多线程传输:可以将文件自动分块,并采用多线程下载。并可自由设置线程数目。
断点续传:点量Http/FTP有优秀的断点续传支持,每次启动自动从上次下载的位置开始,不需要重复下载。
提供详细的下载详情接口(2.0以后版本):可以看到整个下载过程的步骤,比如开启了多少线程、服务器的应答过程、错误信息等。
支持多种高级设置:设置线程数目、磁盘缓存大小、搜索镜像服务器的详细参数设置、下载文件完成后同步文件为服务器上的文件时间、下载过程中可以自定义文件临时后缀、未完成的文件设为隐藏属性。
支持磁盘缓存:点量Http/FTP下载DLL支持设置磁盘缓存,减少对磁盘的读写,并提升下载速度。
支持设置Refer:点量Http/FTP下载组件支持设置下载时的Refer,以便可以绕过一些防盗链的网站,直接下载内容。
限速功能:点量Http/FTP下载组件可方便的设置下载限速。
多种磁盘分配方式:点量Http/FTP下载组件支持预分配和边下载边分配两种磁盘方式,满足多种下载需求。
自动搜索镜像加速:点量Http/FTP内置了镜像搜索功能,在下载文件的同时,会自动搜索哪些其它网站还有这个文件,自动从其它网址下载加速。
可提供源码:支付一定的费用,便可以获得全部的点量Http/FTP下载组件的源代码,免除您的所有后顾之忧。
良好的服务:作为点量软件旗下的软件,可享受到点量软件的优秀服务,我们的服务让您如同拥有一个称心的专业员工。

点量Http/FTP 下载组件可以适用于任何Http和FTP下载的领域,让您可以在1天内完成一个完整的Http下载软件的全部功能。比如,您可以用于产品的升级、文件的下载和传输等。
点量Http/FTP内核可以为您带来:


1、大大节省您的开发成本:了解Http和FTP的协议,再去编码、测试,即使对于一个非常有经验的开发人员来说,也需要较长期的时间,此间耗费的人力资源成本和管理成本可谓不少。而使用点量Http/FTP,您就不需要从制造轮子开始制造您的汽车,将注意力集中于车的设计而不是基础设备的建设。何况我们的产品性能是如此优越!

2、强有力的技术支持:作者长期从事下载技术的研发,所提供的技术支持相当于您雇佣了一位具有丰富经验,无需从头学习的开发人员,可以在您的系统建设过程中为您提供整体系统架设的意见。

如果您是个人作为非商业目的使用,您可以自由、免费的使用点量Http/FTP下载组件内核库和演示程序,也期待收到您反馈的意见和建议;如果您是商业使用,那么您需要联系作者申请产品的商业授权。

-----------------------------------------------------------------------------------------------------------------------
点量软件官方地址:http://www.dolit.cn http://hi.baidu.com/dlbtsoft

点量Http/FTP内核SDK下载地址:http://hi.baidu.com/dlbtsoft/blog/item/09fa66d15a258d89a1ec9c6f.html。
pure_coder 2010-10-17
  • 打赏
  • 举报
回复
这里有个跨平台的下载库,支持HTTP,FTP,HTTPS,多线程下载,还能在手机上跑,你可以参考下
http://www.easygeteasy.com
bobye1230 2008-12-11
  • 打赏
  • 举报
回复
mark
MyCppPython2008 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tianjiao85 的回复:]
引用 9 楼 saitianjiao 的回复:
线程太多,不过针对网络程序,可以给你一个方案:
计算网速:
伪码:

C/C++ code
time t1 = getSysTime();
string html = GetPage(string url);
time t2 = getSysTime();
double dSpeed = html*16/(t2-t1);


多计算些次数,获得平均网速。
按照网速跟线程的比例来决定线程数目,可以去我的博客看下。

想法不错,我觉得再考虑下网络环境,比如内网中可以应用多台机代…
[/Quote]
这个是不错,网络程序有很多需要注意的地方,网速毕竟有限,这是网络程序的瓶颈所在,现在的机器多开些线程是没有什么问题了,代理和分布式不错,但是程序本身也要注意节约网络宽带。比如使用HTTP,DNS查询需要较大开销,可以自己建立DNS服务器,并在程序中限制重复查询。还有许多的地方可以改进,有的研究。
tianjiao85 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 saitianjiao 的回复:]
线程太多,不过针对网络程序,可以给你一个方案:
计算网速:
伪码:

C/C++ code
time t1 = getSysTime();
string html = GetPage(string url);
time t2 = getSysTime();
double dSpeed = html*16/(t2-t1);



多计算些次数,获得平均网速。
按照网速跟线程的比例来决定线程数目,可以去我的博客看下。
[/Quote]
想法不错,我觉得再考虑下网络环境,比如内网中可以应用多台机代理服务器,比如抓取网页,可以多台机器先下载下来,再用一台数据处理服务器从代理服务器获取网页,这样速度是不是更快了,既然网速是瓶颈,那么将这些获取网络资源的代理机器作为一个集群,将数据获取和数据处理在分布式环境下实现。个人愚见,请各位提供意见。
saitianjiao 2008-12-11
  • 打赏
  • 举报
回复
线程太多,不过针对网络程序,可以给你一个方案:
计算网速:
伪码:

time t1 = getSysTime();
string html = GetPage(string url);
time t2 = getSysTime();
double dSpeed = html*16/(t2-t1);

多计算些次数,获得平均网速。
按照网速跟线程的比例来决定线程数目,可以去我的博客看下。
saitianjiao 2008-12-11
  • 打赏
  • 举报
回复
线程太多,不过针对网络程序,可以给你一个方案:
计算网速:
伪码:

time t1 = getSysTime();
string html = GetPage(string url);
time t2 = getSysTime();
double dSpeed = html*16/(t2-t1);

多计算些次数,获得平均网速。
按照网速跟线程的比例来决定线程数目,可以去我的博客看下。
heeten 2008-12-11
  • 打赏
  • 举报
回复
这个东西绝对是专业级的课题!
如果有资料可以共享一下阿,哈哈。
saitianjiao 2008-12-11
  • 打赏
  • 举报
回复
~飘过
tianjiao85 2008-12-11
  • 打赏
  • 举报
回复
兄弟,已经将资料发到你的邮箱,请查看。
tianjiao85 2008-12-08
  • 打赏
  • 举报
回复
期待高手解决。
setoption9 2008-12-08
  • 打赏
  • 举报
回复
up
qap22 2008-12-08
  • 打赏
  • 举报
回复
up
tianjiao85 2008-12-08
  • 打赏
  • 举报
回复
自己顶。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧