应该有一个边界对象 - 保存一组访问并等待抓取URL。 应该有一些线程负责抓取网页。 也会有某种控制器对象来创建爬行线程。最快的多线程网络爬虫体系结构
我不知道什么架构会更快,更容易扩展。如何尽可能少的同步来分配责任,并且最小化检查当前URL是否已经被访问的次数。
控制器对象是否应该负责为工作线程提供新的URL - 这意味着工作线程需要抓取所有给定的URL,然后睡眠时间不确定。控制器将解释这个线程,所以爬行线程应该处理InterruptedException
(它在Java中的代价是多少 - 似乎异常处理不是很快)。 或者,也许控制器应该只启动线程并让线程自行抓取边界?