文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4.4 性能
为了进一步了解增加线程和进程的数量会如何影响下载时间,我们对爬取1000个网页时的结果进行了对比,如表4.1所示。
表4.1
脚本 | 线程数 | 进程数 | 时间 | 相对串行的时间比 |
串行 | 1 | 1 | 28分59.966秒 | 1 |
多线程 | 5 | 1 | 7分11.634秒 | 4.03 |
多线程 | 10 | 1 | 3分50.455秒 | 7.55 |
多线程 | 20 | 1 | 2分45.412秒 | 10.52 |
多进程 | 5 | 2 | 4分2.624秒 | 7.17 |
多进程 | 10 | 2 | 2分1.445秒 | 14.33 |
多进程 | 20 | 2 | 1分47.663秒 | 16.16 |
表格的最后一列给出的是相对于串行下载的时间比。可以看出,性能的增长与线程和进程的数量并不是成线性比例的,而是趋于对数。比如,使用1个进程和5个线程时,性能大约为串行时的4倍,而使用20个线程时性能只达到了串行下载时的10倍。虽然新增的线程能够加快下载速度,但是起到的效果相比于之前添加的线程会越来越小。其实这是可以预见到的现象,因为此时进程需要在更多线程之间进行切换,专门用于每一个线程的时间就会变少。此外,下载的带宽是有限的,最终添加新线程将无法带来更快的下载速度。因此,要想获得更好的性能,就需要在多台服务器上分布式部署爬虫,并且所有服务器都要指向同一个MongoDB队列实例。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论