日期:2014-05-18  浏览次数:20825 次

【新手求助】高分求个超快的多线程算法,高手来看看
我现在有5亿多个网址

我想用xmlhttp.open的方式快速的把他们访问一遍

我做这个程序的功能大致是:每访问一个网址会返回此网页的源码,根据此网页的源码来判断此网址是否可用。

关键点:求超快的多线程算法!一天最多能访问多少个网址?

我上网用的是光纤(下载文件一般是5M以上每秒),速度上应该够用。

先谢谢各位高手了!

------解决方案--------------------
理论上对于单核cpu,单线程会快于多线程,多线程在cpu数量多于线程数量时,效果最优
根据你的总数量,大概估算一下开多少个线程,每个线程负责一部分网址,c#有线程池,你可以用
------解决方案--------------------
不是说了吗,单cpu和多核的区别吗,你这个如果仅仅获得网页内容,根本谈不上什么算法,你用c#的自己的线程池即可
------解决方案--------------------
你可以去看下爬虫程序
------解决方案--------------------
这程序不是你的知识层次能搞的。该花点钱就花点钱。
------解决方案--------------------
估计楼上大虾说的对
软件再快都快不过硬件
------解决方案--------------------
探讨

理论上对于单核cpu,单线程会快于多线程,多线程在cpu数量多于线程数量时,效果最优
根据你的总数量,大概估算一下开多少个线程,每个线程负责一部分网址,c#有线程池,你可以用

------解决方案--------------------
5E的网址,看样子肯定不是同一个站点的.你是5M的光纤.
平均一个下载用20-50K/S(最多100K)的样子,5000/50 = 100.
我觉得100个线程是一个比较合理的数据,而且CPU毫无压力
------解决方案--------------------
我曾经做过一个刷票的程序,帮一个同学刷票.
需要刷 点击数和投票数. 投票数用流量精灵刷的,有IP和时间限制.
点击数就是用100K的网刷的,开30个线程,妥妥的,几分钟就刷到3W了...吓的都不敢开了
------解决方案--------------------
5亿个网址,你的宽带是5M,就算不考虑网络延迟等因素,你自己算算吧
------解决方案--------------------
并行计算
http://msdn.microsoft.com/zh-cn/library/dd783747.aspx
自己写个处理方法,参数就是一个网址
------解决方案--------------------
楼主有件事没搞清楚。你的网速的快慢和访问别人的网站关系并不大。下行速度一般都比上行要快很多的。
上行速度一般都是比下载慢好几倍的。而且你的这个5E还不一定每个都能建立连接。能建立的速度还很快。如果不能建立连接的。那个速度是很慢的。
还有5E网站,如果有国外的。很多都会被墙掉的。

------解决方案--------------------
如果理想状态下。假设这5亿个都存在而且状态良好。1秒钟 100个。应该没有啥压力。