• 在python中使用多线程的时候其实执行的是单线程,因为在cpython解释器进行解释的时候有一个全局解释器锁,保证了在同一时刻仅有一个线程在执行任务。

    image.png

    • python官方推荐使用cpython解释器,而cpython解释器从以前留下的问题便是GIL,因为很早以前,九几年的主机基本都是单核,能实现多任务就不错了,并没有考虑到多核问题,至今cpython想移除GIL并不是容易的事情。
    • 而使用jpython等其他的解释则移除了GIL,但是效率反而下降很多。

    image.png

    • 虽然python多线程并不是真正的多线程,但是并不影响我们使用它,因为系统在遇到IO延时操作时,系统会自动释放GIL,任务在等待的时间,让线程去执行其他的任务,从而实现多任务,如下图所示:
    • 如果想要利用多核的优势,可以使用进程,或者使用C语言编写程序,将C语言动态链接到python程序中