- A+
并行 和 并发:
并行:多个CPU核心,不同的程序就分配给不同的CPU来运行。可以让多个程序同时执行。
cpu1 -------------
cpu2 -------------
cpu3 -------------
cpu4 -------------
并发:单个CPU核心,在一个时间切片里一次只能运行一个程序,如果需要运行多个程序,则串行执行。
cpu1 ---- ----
cpu1 ---- ----
多进程/多线程:
表示可以同时执行多个任务,进程和线程的调度是由操作系统自动完成。
Python的多线程:
GIL 全局解释器锁:线程的执行权限,在Python的进程里只有一个GIL。
一个线程需要执行任务,必须获取GIL。
好处:直接杜绝了多个线程访问内存空间的安全问题。
坏处:Python的多线程不是真正多线程,不能充分利用多核CPU的资源。
但是,在I/O阻塞的时候,解释器会释放GIL
所以:
多进程:密集CPU任务,需要充分使用多核CPU资源(服务器,大量的并行计算)的时候,用多进程。 multiprocessing
缺陷:多个进程之间通信成本高,切换开销大。
这次我们主要爬取,电影名字跟评分。只是使用不同方式去对比下不同点,所以数据方面就不过多提取或者保存。只是简单的将其爬取下打印出来看看。
第一:采用多进程 , multiprocessing 模块。 当然这个耗时更网络好坏有关。在全部要请求都正常的情况下耗时15s多。
Process多进程实现
采用多线程时,耗时10.4s
thread
采用协程爬取,耗时15S,
gevent
用了多进程,多线程,协程,实现的代码都一样,没有测试出明显的那个好!都不分上下,可能跟网络,或者服务器配置有关。
但理论上来说线程,协程在I/O密集的操作性能是要高于进程的。
也可能是我的方法有问题,还望大神们指教!
谢谢阅读!