gpt4 book ai didi

java - 多线程网络爬虫的最快架构

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:15:20 25 4
gpt4 key购买 nike

应该有一个边界对象——持有一组已访问和等待抓取的 URL。应该有一些线程负责抓取网页。还会有某种 Controller 对象来创建爬行线程。

我不知道哪种架构会更快、更容易扩展。如何划分职责以尽可能少地进行同步,并最大程度地减少检查当前 URL 是否已访问的次数。

Controller 对象是否应该负责向工作线程提供新的 URL - 这意味着工作线程将需要抓取所有给定的 URL,然后 hibernate 一段未定义的时间。 Controller 将解释此线程,因此爬行线程应该处理 InterruptedException(在 Java 中它是多么昂贵 - 似乎异常处理不是很快)。或者也许 Controller 应该只启动线程并让爬行线程自己获取边界?

最佳答案

创建一个共享的、线程安全的列表,其中包含要抓取的 URL。创建一个执行器,其线程数与您希望同时运行的爬虫数相对应。使用对共享列表的引用将你的爬虫作为 Runnables 启动,并将它们中的每一个提交给执行器。每个爬虫从列表中删除下一个 URL 并执行您需要它执行的任何操作,循环直到列表为空。

关于java - 多线程网络爬虫的最快架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8547003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com