深南之星

导航

 

GIL--全局解释器锁

 

1. python增加GIL的原因:

    cpython解释器的内存管理并不是线程安全的

    保护多线程下对python对象的访问

    cpython使用简单的锁机制避免多个线程同时执行字节码

 

2. 影响:

   同一时间只有一个线程执行字节码

   CPU密集程序难以使用多核的优势

 IO期间会释放GIL的,对IO密集程序影响不大

 

3. 如何规避影响

  CPU密集使用多进程+进程池

  IO密集使用线程//协程

 

 

4.有GIL,为何还要关注线程安全

     原子操作:一个指令如果是一个字节码可以完成就是原子的,原子操作是可以保证线程安全的;

     大部分业务代码均是非原子操作,所以访问同一对象时,在多线程中依旧不是线程安全的;

 

 

 

 

  

posted on 2020-02-13 15:30  深南之星  阅读(101)  评论(0编辑  收藏  举报