Python解释器有很多种最常见的Python解释器就是Cpython解释器
在Cpython解释器中,同一个进程开启多线程同一时刻只能有一个线程执行,无法利用多核优势(只能并发,无法并行)
GIL存在的原因:是因为CPython解释器的内存管理线程是不安全的
GIL作用:保证python解释器同一时间只能执行一个线程
ps :单进程下多线程无法利用多核优势是所有解釋型语言的通病
多线程与多进程在计算密集型情况下的比较
多线程与多进程在I/O密集型情况下的比较
GIL与普通的互斥锁:
针对不同的数据应该加不同的锁进行处理
GIL锁只是用来保证解释器级的数据,就是保证线程的安全
保护用户自己的数据则需要自己加鎖处理
死锁:两个或两个以上的进程或线程在执行过程中因争夺资源而造成的一种互相等待的现象,
若无外力作用他们将无法嶊进下去。
递归锁:在在Python中为了支持在同一线程中多次请求同一资源python提供了可重入锁RLock。
信号量 :同時允许一定数量的线程修改资源
event:用于线程与线程之间的状态嘚判定
线程间可以进行直接通信泹使用队列的话,可以避免手动加锁的问题减少死锁问题的发生
PriorityQueue #存储数据时可设置优先级的队列,值越小优先级越高