来源:python中国网 时间:2019-06-06

  全局解释器锁GIL,大多数人都听过说。网上的言论大多说python的多线程是鸡肋(其实说的并不对):

  先看网上的帖子:

  尽管Python完全支持多线程编程,但是解释器的C语言实现部分在完全并行执行时并不是线程安全的。实际上,解释器被一个全局解释器锁保护着,它确保任何时候都只有一个Python线程执行。GIL最大的问题就是Python的多线程程序并不能利用多核CPU的优势(比如一个使用了多个线程的计算密集型程序只会在一个单CPU上面运行)。

  接下来又谈:

  GIL只会影响到那些严重依赖CPU的程序(比如计算型的)。如果你的程序大部分只会涉及到I/O,比如网络交互,那么使用多线程就很合适,因为它们大部分时间都在等待。实际上,你完全可以放心的创建几千个Python线程,现代操作系统运行这么多线程没有任何压力,没啥可担心的。

  这是不是让人感觉自相矛盾,既然同一时刻只有一个线程获得锁,多线程有何意义?可为啥又说IO操作适合多线程!

  原因何在?

  GIL解释器锁在程序运行时会有条件的进行释放!比如字节码的长度、IO延时等!否则就没必要在写多线程的时候加锁了。