《Python 核心技术与实战》 学习笔记 Day20 Python并发编程之Futures

区分并发和并行

在 Python 中,并发并不是指同一时刻有多个操作(thread、task)同时进行。相反,某个特定的时刻,它只允许有一个操作发生,只不过线程 / 任务之间会互相切换,直到完成。

  • 并发通常应用于 I/O 操作频繁的场景,比如你要从网站上下载多个文件,I/O 操作的时间可能会比 CPU 运行处理的时间长得多。
  • 而并行则更多应用于 CPU heavy 的场景,比如 MapReduce 中的并行计算,为了加快运行速度,一般会用多台机器、多个处理器来完成。

为什么多线程每次只能有一个线程执行?

Python 主程序只允许有一个线程执行,所以 Python 的并发,是通过多线程的切换完成的。

事实上,Python 的解释器并不是线程安全的,为了解决由此带来的 race condition 等问题,Python 便引入了全局解释器锁,也就是同一时刻,只允许一个线程执行。当然,在执行 I/O 操作时,如果一个线程被 block 了,全局解释器锁便会被释放,从而让另一个线程能够继续执行。

总结

  • 并发,通过线程和任务之间互相切换的方式实现,但同一时刻,只允许有一个线程或任务执行。
  • 而并行,则是指多个进程同时执行。

并发通常用于 I/O 操作频繁的场景,而并行则适用于 CPU heavy 的场景。

要注意,Python 中之所以同一时刻只允许一个线程运行,其实是由于全局解释器锁的存在。但是对 I/O 操作而言,当其被 block 的时候,全局解释器锁便会被释放,使其他线程继续执行。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容