目标:
    1:掌握什么是GIL
    2:掌握GIL存在的原因
    3:掌握GIL对多任务的影响
    4:掌握在什么时候可以释放GIL

    一:什么是GIL

    答:GIL称为全局解释器锁,python执行多线程任务之前,某线程会获得一把GIL,而且GIL又是一把互斥锁,某个线程执行任务调用cpu核资源时,其他线程就不能执行其他任务,只能等待GIL释放完毕才会执行任务,保证同一时间只有一个线程在使用GIL,简而言之,每个执行任务的线程都会获得一把GIL,有且整个程序只有一把GIL

    注意:GIL与python语言无关,而是与cpython解释器有关,比如jpython解释器就没有这个GIL

    二:GIL存在的原因

    1:编写PYTHON的时候计算机普遍是单核cpu
    2:不加GIL执行多线程任务容易引起资源竞争

    三:GIL对多任务的影响

    多线程:造成伪多线程,实际同一时间只有一个cpu内核在轮询执行任务,保证同一时间只有一个线程可以执行任务
    多进程:不会造成影响,两个进程,那就调度两个cpu内核执行这两个进程任务

    四:在什么时候可以释放GIL

    1:获得全局解释器锁的线程任务执行完毕
    2:获得全局解释器锁的线程超过时间片轮询时间,自动释放GIL,执行其他任务
    3:I/O操作阻塞时自动释放GIL
    4:获得全局解释器锁的线程执行阻塞时自动释放GIL


    你问我答:因为GIL也是一把互斥锁,那么是否意味着我们在操作多线程全局变量时不用添加互斥锁了呢?

    答:错误,因为无法控制GIL锁释放的时间,不能确保使用完全局变量的操作是否已经完成!



    课后习题:因为GIL存在的原因,多线程相当与伪多线程,那么为什么多线程的执行效率比多线程高呢?

    答:因为多线程执行任务时遇到I/O操作阻塞等原因会自动释放GIL