我目前正在开发一个带有内置网络爬虫的自定义搜索引擎。出于某种原因,我不喜欢多线程,到目前为止,我的索引器是以单线程方式编码的。现在我对正在构建的爬虫有一个小困境。任何人都可以建议哪个更好,抓取 1 页然后索引它,或者抓取 1000 多个页面并缓存,然后索引?
robust
问问题
1305 次
4 回答
4
网络很慢(相对于 CPU)。通过并行化爬虫,您将看到速度显着提高。否则,您的应用程序将花费大部分时间等待网络 IO 完成。您可以使用多线程和阻塞 IO,也可以使用带有异步 IO 的单线程。
此外,与一次索引一个文档相比,大多数索引算法在批量文档上的性能会更好。
于 2009-05-14T01:10:38.607 回答
1
不使用线程是可以的。但是,如果您仍然想要性能,则需要处理异步 IO。我建议查看 Boost.ASIO链接文本。使用异步 IO 将使您的困境“无关紧要”,因为这无关紧要。另外作为奖励,将来如果您决定使用线程,那么告诉 Boost.Asio 将多个线程应用于问题是微不足道的。
于 2009-05-14T02:45:07.957 回答
1
更好的?在什么方面?就速度而言,我无法预见明显的差异。就健壮性(从灾难性故障中恢复)而言,最好在抓取每个页面时对其进行索引。
于 2009-05-14T00:26:12.793 回答
1
如果您对爬虫很认真,我强烈建议您“加入”多线程。基本上,您会希望始终运行至少一个索引器和至少一个爬虫(两者都可能有多个)。除其他外,这最大限度地减少了启动和关闭开销(例如初始化和释放数据结构)。
于 2009-05-14T00:28:34.023 回答