上万待爬虫的网页,速度慢怎么办——线程与进程!

爬虫基础:
爬虫包括请求、提取和保存三个部分,这时候的这个爬虫有了能爬能存的能力。
弱势:
①爬虫本身健壮性并不高,有很多情况不一定考虑到;
②爬虫爬的很慢,效率很低;
③防反爬能力不强,容易被Ban掉
针对:②爬虫爬的很慢,效率很低;解决策略——多进程and多线程
强补:
进程(Process)是程序关于某数据集合上的一次运行活动,是系统资源分配和调度的基本单位,操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
线程特点:轻型实体,独立调度和分派的基本单位,可并发执行,共享进程资源。 进程和线程:一父一子的关系。 1,线程,
【待补充】
2,进程
【待补充】
多进程和多线程适用场景:
多线程技术就可以同时执行,比如你的程序需要发送 N 个 http 数据包(10 秒),还需要将文件从一个位置复制到另一个位置(20 秒),然后还需要统计另一个文件中'hello,world'字符串的出现次数(4 秒),现在一共是要用 34 秒。但是因为这些操作之间没有关联,所以可以写成多线程程序,几乎只需要 20 秒就完成了。针对 I/O 密集型的任务,脚本语言会更适合,例如Python。比如我的程序要计算 1000 的阶乘(10 秒),还要计算 100000 的累加(5 秒),那么即使程序是并行的,还是会要用 15 秒,甚至更多。因为当程序使用 CPU 的时候 CPU 是通过轮转来执行的,IO 密集型的程序可以在 IO 的同时用 CPU 计算,但是这里的 CPU 密集型就只能先执行一会儿线程 1 再执行一会儿线程 2。所以就需要 15 秒,甚至会更多,因为 CPU 在切换的时候需要耗时。解决 CPU 密集型程序的多线程问题就是 CPU 的事情了,使用C语言会更适合。

总结:Python多线程在IO密集型任务中还是很有用处的,而对于计算密集型任务,应该使用多进程(C语言)。

知识补充:
【上万待爬虫的网页,速度慢怎么办——线程与进程!】异步I/O:现代操作系统对IO操作已经做了巨大的改进,最大的特点就是支持异步IO。如果充分利用操作系统提供的异步IO支持,就可以用单进程单线程模型来执行多任务,这种全新的模型称为事件驱动模型,Nginx就是支持异步IO的Web服务器,它在单核CPU上采用单进程模型就可以高效地支持多任务。在多核CPU上,可以运行多个进程(数量与CPU核心数相同),充分利用多核CPU。由于系统总的进程数量十分有限,因此操作系统调度非常高效。用异步IO编程模型来实现多任务是一个主要的趋势。


    推荐阅读