python多线程

    xiaoxiao2025-10-06  16

    大家可能听说过python多线程中存在的GIL问题,使得Python在处理计算密集型任务上效果反而不如单线程,为了更好的理解这一点,我们从CPU密集型任务和IO密集型任务入手,深入讨论一下python多线程及其相关知识。

    CPU密集型和IO密集型

    通常来说,我们把任务分为计算密集型(CPU)和IO密集型两种,从名字上可以判断出,计算密集型任务需要花费较大的CPU资源,比如进行大量的复杂数学计算,而python在处理这样的任务时往往会力不从心,因为任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低。 而IO密集型任务则不一样,因为很少涉及到CPU计算,典型的是web应用,读写文件之类的任务。由于速度远远不如CPU和内存的处理速度,这类任务的大部分时间损耗都是在等待IO相关任务的完成,因此使用开发效率高的脚本语言相对更适合。

    多线程与多进程

    Python中比较常见的并发方式主要有两种:多线程和多进程。由于GIL的存在,python在处理多线程时往往只能交替执行的现象,所以说python不能有效的利用多核CPU,无法有效的处理CPU密集型任务。 而在处理IO密集型任务等待IO过程中会释放GIL, 最终会导致线程在等待IO过程中会被暂停去执行其他的线程,优化了阻塞等待IO的时间,优化了任务执行。

    因为多线程GIL的存在,python在处理CPU密集型任务的时候往往会使用多进程,理由也很简单,每个进程GIL不同,因此不会出现多线程获取和释放GIL的尴尬。


     

    更新2020/2/9

    JS的线程还没有复习过,这个倒是提醒我了,下一篇文章写一下JS的event loop

    相对于Python来说,还是要容易些

    最新回复(0)