返回信息流最近着手写一个C#的爬虫 对于大规模循环的处理采用了.Net 4.0的并行循环 但效率不是很理想 想使用多线程或者用线程池+任务队列来解决 看了1天的资料也木有特别深刻的理解 想求助下版上的大牛们~ 有人有用过多线程或者线程池处理大规模的循环的么~?非常感谢~~
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3754同步于 2012/5/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
求助:关于多线程爬虫
Apolloman
2012/5/30镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 Apolloman 的大作中提到: 】
: 最近着手写一个C#的爬虫 对于大规模循环的处理采用了.Net 4.0的并行循环 但效率不是很理想 想使用多线程或者用线程池+任务队列来解决 看了1天的资料也木有特别深刻的理解 想求助下版上的大牛们~ 有人有用过多线程或者线程池处理大规模的循环的么~?非常感谢~~
首先你要确定你的程序会相对长时间被阻塞在服务器的IO上,这样的话多线程才有意义,不然抓取若是被阻塞在客户端的IO或CPU上,多线程也不会提高效率。
若符合这个条件,就可以开启多个线程取抓取网页,比如你开10个线程取抓网页,没抓取完成一个,新开一个,但是建议网页的解析不要多线程,这个计算密集型的在单机多线程也提高不了多少速度,将抓回的网页以任务队列交给页面解析程序。
【 在 wangjianzhou 的大作中提到: 】
: 首先你要确定你的程序会相对长时间被阻塞在服务器的IO上,这样的话多线程才有意义,不然抓取若是被阻塞在客户端的IO或CPU上,多线程也不会提高效率。
: 若符合这个条件,就可以开启多个线程取抓取网页,比如你开10个线程取抓网页,没抓取完成一个,新开一个,但是建议网页的解析不要多线程,这个计算密集型的在单机多线程也提高不了多少速度,将抓回的网页以任务队列交给页面解析程序。
remote IO和local IO没什么本质区别,都是阻塞操作
【 在 everdie 的大作中提到: 】
: remote IO和local IO没什么本质区别,都是阻塞操作
假如是由于你的带宽是1k,几分钟才能下载一个网页,抓取被阻塞在本地网络IO,多开线程也是徒劳,若阻塞在远端的网络IO,比如你抓新浪时,新浪的访问太多,你可以不必等到新浪抓取完再抓下一个网页,而是可以直接开一个线程取抓下一个网页,当线程对应的url抓取,你再从抓取队列移除这个url
【 在 wangjianzhou 的大作中提到: 】
: 假如是由于你的带宽是1k,几分钟才能下载一个网页,抓取被阻塞在本地网络IO,多开线程也是徒劳,若阻塞在远端的网络IO,比如你抓新浪时,新浪的访问太多,你可以不必等到新浪抓取完再抓下一个网页,而是可以直接开一个线程取抓下一个网页,当线程对应的url抓取,你再从抓取队列移除这个url
本地网络IO?