|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。这两天在写一个java多线程的爬虫,以广度优先爬取网页,设置两个缓存:
- 一个保留已会见过的URL:vistedUrls
- 一个保留没有会见过的URL:unVistedUrls
必要爬取的数据量不年夜,对URL紧缩后,能够把这两个数据布局都放进内存,vistedUrls很明显用HashSet<String>完成,由于已会见的URL只会增加,不会删除和修正,利用HashSet能够高效判别一个URL是不是已会见。
纠结unVistedUrls该用甚么数据布局,假如用行列的话,并发情形下,行列中大概会用反复的URL,好比一个线程A爬了CSDN的一个URL1,另外一个线程B爬了博客园的一个URL2,URL1和URL2的页面都有一个不异的出链URL3,线程A把URL3到场到unVistedUrls的队尾,守候下次爬取,但在URL3被爬取之前,线程B也把URL3加到队尾,如许行列中就有两个不异的URL,大概会招致反复爬取网页,固然能够经由过程其他办法来包管不会反复爬取。
然后就想可否也用Set来保留未会见的URL,如许在增加新的URL时,主动往重处置了,可以无效包管不爬取反复网页。可是unVistedUrls会有大批的拔出和删除操纵,我以为对汇合举行大批的拔出删除功能会对照低,为了测试汇合的拔出删除功能对照行列低几,我写了一个复杂的并发测试:
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。 |
|