美文网首页
《Python 核心技术与实战》 学习笔记 Day20 Pyth

《Python 核心技术与实战》 学习笔记 Day20 Pyth

作者: _相信自己_ | 来源:发表于2023-02-03 21:38 被阅读0次

    区分并发和并行

    在 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 的时候,全局解释器锁便会被释放,使其他线程继续执行。

    相关文章

      网友评论

          本文标题:《Python 核心技术与实战》 学习笔记 Day20 Pyth

          本文链接:https://www.haomeiwen.com/subject/pminhdtx.html