区别
并发:单处理器同时处理多个任务
并行:多处理器同时处理多个任务
在 Python 中,并发不是指同一时刻有多个任务同时进行,由于GIL(Global Interpreter Lock, 全局解释器锁),使得任何时刻仅有一个线程在执行。
因此python中的并发只不过任务之间的互相切换,直到所有任务完成,如下图。https://my.oschina.net/lichuangnk/blog/1818314
而并行,指的是同一时刻、同时发生,如下图。https://my.oschina.net/lichuangnk/blog/1818314
在Python 中,并行是 multi-processing 。比如你的电脑是8 核处理器,那么可以强制 Python 开8个进程运行程序,加快运行速度。
场景并发通常应用于 I/O 操作频繁的场景
比如你在实现一个爬虫时,从网页爬取多个图片/文件,读写操作的时间远大于 CPU 运行处理时间并行则更多应用于 CPU heavy 的场景,
比如 MapReduce 中的并行计算,通常为加快运行速度,使用多台服务器或者处理器
注意点
使用并发过程中,需要确切知道某个任务的哪个具体环节会造成I/O阻塞,在该处设置中断。从而让Event Loop对队列中的下一个任务进行调度。
如果当前任务不涉及较为耗时的I/O操作,协程效果相比单线程会差,因为Event Loop在调度过程中会损失一定的资源。