GIL

知识储备:

 

"""
1、什么事GIL

  全局解释器锁,本质就是一把互斥锁,是加到解释器身上的,每一个python进程内都有这么一把锁i

2、有了GIL会对单进程下的多个线程造成什么样的影响

  多线程要想执行自己的代码,首先需要争抢GIL,对所有待执行的线程来说,GIL就相当于执行权限

  同一时刻只有一个线程争抢成功,即单进程下的多线线程同一时刻只有一个在运行

  意味着但进程下的多线程没有并行的效果,但是有并发的效果

  PS:分散于不同进程内的线程不会去争抢同一把GIL,只有同一个进程的多个线程才争抢同一把GIL

3、为什么要有GIL

  Cpython解释器的内存管理机制(垃圾回收线程)不是“线程安全”的

4、GIL与自定义胡知所的异同,多个线程争抢GIL与自定义互斥锁的过程分析

  相同:

    互斥锁
  不同点:

    GIL是加到解释器上的,作用于全局
    自定义互斥锁作用于局部
    
    单进程内的所有线程都会去抢GIL
    单进程内的只有一部分线程会去抢自定义的互斥锁
5、什么时候用python的多线程,是么时候用多进程,为什么?

  单进程下的多线线程是无法并行,无法并行意味着不能利用多核优势

  CPU是执行计算工作,多个CPU意味提升计算性能

  CPU是无法做I/O操作,意味着多个CPU在I/O操作面前提升的性能效益微乎其微

  

  当程序是I/O密集型情况下,多核对性能的提升微不足道,此时可以使用python的多线程

  当程序是计算密集型情况下,一定要用上多核优势,此时可以使用python多进程

    

** 多个线程争抢GIL与自定义互斥锁的过程分析 **
    多个线程先争抢GIL锁,

"""

 

 

posted @ 2018-04-27 12:17  MJay_Lee  阅读(138)  评论(0编辑  收藏  举报