爬虫程序的IO模型

jiangfeng999 2009-06-30 09:30:59
大家好,我现在在编写一个爬虫程序,但是不知道选用哪一种IO模型的抓取效率会比较高
正在苦恼中
...全文
104 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Murusu 2009-07-16
  • 打赏
  • 举报
回复
想请教一下,win32下用完成端口跟ace比起来那个效率更高?
beipiao 2009-07-15
  • 打赏
  • 举报
回复
各平台比较高效的I/O系统机制:
win32: io完成端口
linux(2.6内核,2.4要打补丁): epoll
freebsd: kevent
solaris: Event Completion

我以前整理过一些文章,不过基本上都是linux/unix的
beipiao 2009-07-15
  • 打赏
  • 举报
回复
开源的larbin值得研究

给你提一些要点

一. 关键的需求点:
并发量有多大,是否需要分布式;
数据抽取的复杂度(如果数据抽取的开销大,而且是实时抽取的话,那么爬虫的架构和I/O模型就要多考虑它的影响);

二. 技术要点:
1. I/O:
大规模:单线程、事件驱动
小规模:多线程

2. 协议:
http,html,js,cookie等

3. 页面存储:
如果需要存储,将是一个大的难点

4. 其它:
dns缓存;
url去重;
内存池;
中断点保存和恢复;
......


jiangfeng999 2009-07-14
  • 打赏
  • 举报
回复
再问一下,如果我用完成端口做爬虫。完成端口应该怎么分配呢,是一台主机用一个完成端口,还是所有的主机都使用一个完成端口。
gaoteng1984 2009-07-05
  • 打赏
  • 举报
回复
目前也有一些开源爬虫用的是多线程同步下载方式,比如Heritrix,性能也不低
gaoteng1984 2009-07-05
  • 打赏
  • 举报
回复
单机的那种1MB网速以内的爬虫,就多线程同步套接字就足够了,因为这时的瓶颈在于网络速度,而不是线程间切换和互斥的开销,线程数目在100以内时,所有线程栈的内存开销也不大。
千兆网上的爬虫,才要去用完成端口
coolzdp 2009-07-04
  • 打赏
  • 举报
回复
参考larbin,不过是linux的
jiangfeng999 2009-07-03
  • 打赏
  • 举报
回复
用IOCP做爬虫程序有例子吗,最好有例子
我现在一直搞不清楚的是用IOCP做爬虫程序,使用多少个完成端口比较合适,还有完成端口如何分配
jiangfeng999 2009-07-01
  • 打赏
  • 举报
回复
我在我的爬虫程序中建立了一个DNS缓存,把和每架主机的链接都长期保存起来.
如果使用完成端口是每一架主机使用一个完成端口,还是在这个爬虫进程中的所有主机都使用同一个完成端口
guohaibo 2009-07-01
  • 打赏
  • 举报
回复
完成端口,数据流量应该比较大吧。
猞猁狲 2009-06-30
  • 打赏
  • 举报
回复
如果熟悉完成端口,那最好用完成端口,如果不熟悉,就用ace找个现成的例子
blackcat242 2009-06-30
  • 打赏
  • 举报
回复
完成端口呗,windows上面也就这个效率最高了

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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