Python GIL(Global Interpreter Lock)
一.全局解释器锁

''' 1 GIL:全局解释器锁 GIL本质就是一把互斥锁,是加在解释器身上的, 同一个进程内的所有线程都需要先抢到GIL锁,才能执行解释器代码 2、GIL的优缺点: 优点: 保证Cpython解释器内存管理的线程安全 缺点: 同一进程内所有的线程同一时刻只能有一个执行, 也就说Cpython解释器的多线程无法实现并行 ''' from threading import Thread,current_thread import time def task(): print('%s is running' %current_thread().name)#查看线程名 time.sleep(3) print('%s is done' %current_thread().name) if __name__ == '__main__': t1=Thread(target=task) t2=Thread(target=task) t3=Thread(target=task) t1.start() t2.start() t3.start()
二.GIL(全局解释器锁)
2.1什么是GIL?
全局解释器锁,本质就是一把互斥锁,是加到解释器身上的,每一个python进程内都有这么一把锁
2.2有了GIL会对单进程下的多个线程造成什么影响?
多线程要想执行,首先需要争抢GIL,对所有待执行的线程来说,GIL就相当于执行权限,
同一时刻只有一个线程争抢成功,即单进程下的多个线程同一时刻只有一个在运行
意味着单进程下的多线程没有并行的效果,但是有并发的效果
ps:分散于不同进程内的线程不会去争抢同一把GIL,只有同一个进程的多个线程才争抢同一把GIL
2.3为什么要有GIL?
Cpython解释器的内存管理机制不是线程安全的
2.4GIL与自定义互斥锁的异同,多个线程争抢GIL与自定义互斥锁的过程分析
相同:
都是互斥锁
不同点:
GIL是加到解释器上的,作用于全局
自定义互斥锁作用于局部
单进程内的所有线程都会去抢GIL
单进程内的只有一部分线程会去抢自定义的互斥锁
2.5什么时候用python的多线程,什么时候用多进程,为什么?
单进程下的多个线程是无法并行,无法并行意味着不能利用多核优势
cpu干的计算的活,多个cpu意味提升了计算性能,
cpu是无法做IO操作,多个cpu在IO操作面前毫无用处
当我们的程序是IO密集型的情况下,多核对性能的提升微不足道,此时可以使用python的多线程
当我们的程序是计算密集型的情况下,一定要用上多核优势,此时可以使用python的多进程
三.
pass
四.
pass

浙公网安备 33010602011771号