在啥情况下,网络爬虫可能会受到 CPU 限制而不是 IO 限制?

Posted

技术标签:

【中文标题】在啥情况下,网络爬虫可能会受到 CPU 限制而不是 IO 限制?【英文标题】:In what scenarios might a web crawler be CPU limited as opposed to IO limited?在什么情况下,网络爬虫可能会受到 CPU 限制而不是 IO 限制? 【发布时间】:2011-05-21 01:26:24 【问题描述】:

看起来典型的爬虫只下载少量页面或做很少的处理来决定要下载的页面是 IO 限制的。

我很好奇相关数据结构、存储页面数量、索引要求等的大小估计数量级可能实际上使 CPU 成为瓶颈?

例如,应用程序可能希望根据页面上找到的链接计算一些概率,以确定接下来要抓取的页面。此函数采用O(noOfLinks) 并评估N 次(在每个步骤中)...其中N 是我想在一轮抓取中下载的页面数。我必须对这些概率进行排序和跟踪我必须跟踪O(N) 的列表,这些列表最终将被转储到磁盘和搜索引擎的索引中。 N 增长到足够大并且存储页面和操作链接变得足够昂贵以与 IO 响应竞争是不是不可能(假设是一台机器)?

【问题讨论】:

密切相关:What does it mean to say a web crawler is I/O bound and not CPU bound? 当它试图找出验证码时。 【参考方案1】:

仅当您对每个页面进行大量处理时。例如,如果您正在运行某种 AI 来尝试猜测页面的语义。

即使你的爬虫在非常快的连接上运行,创建连接仍然存在开销,而且你可能还受到目标机器带宽的限制

【讨论】:

【参考方案2】:

如果页面包含图片并且您尝试对图片进行人脸识别(即形成包含每个人图片的页面地图)。由于所涉及的处理,这可能会受到 CPU 限制。

【讨论】:

【参考方案3】:

不是真的。下载这些额外的链接需要 I/O,然后您又回到了 I/O 受限状态。

【讨论】:

【参考方案4】:

如果你使用 tomcat 搜索“Crawler Session Manager Valve”

【讨论】:

以上是关于在啥情况下,网络爬虫可能会受到 CPU 限制而不是 IO 限制?的主要内容,如果未能解决你的问题,请参考以下文章

在啥情况下我们必须使用 localstorage 而不是 cookie? [复制]

在啥情况下我应该使用尝试而不是二叉树/哈希表? [复制]

JS try catch语句一般在啥情况下使用?是必须使用的吗

在啥情况下我应该在 C++ 中使用 memcpy 而不是标准运算符?

在啥情况下“Openwrt”优于“Buildroot”框架?

为啥在原理图绘制过程中要使用网络标号和总线?在啥情况下适合采用总线连接?