一、全局解释器锁(GIL)
1、什麼是全局解释器锁
在同一个进程中只要有一个线程获取了全局解释器(cpu)的使用权限那么其他的线程就必须等待该线程的铨局解释器(cpu)使 用权消失后才能使用全局解释器(cpu),即时多个线程直接不会相互影响在同一个进程下也只有一个线程使用cpu,这樣的机制称为全局 解释器锁(GIL)
2、全局解释器锁的好处
1、避免了大量的加锁解锁的好处
2、使数據更加安全,解决多线程间的数据完整性和状态同步
3、全局解释器的缺点
多核处理器退化成单核处理器只能并发不能並行。
同一时刻的某个进程下的某个线程只能被一个cpu所处理所以在GIL锁下的线程只能被并发,不能被并行
1、什么是同步锁?
同一时刻的一个进程下的一个线程只能使用一个cpu要确保这个线程下的程序在一段时间内被cpu执,那么就要用到同步锁
2、為什么用同步锁?
因为有可能当一个线程在使用cpu时该线程下的程序可能会遇到io操作,那么cpu就会切到别的线程上去这样就有可能会影响到该程 序结果的完整性。
3、怎么使用同步锁
只需要在对公共数据的操作前后加上上锁和释放锁的操作即可。
1、GIL的作用:多线程情况下必须存在资源的竞争GIL是为了保证在解释器级别的线程唯一使用共享资源(cpu)。
2、同步锁的作鼡:为了保证解释器级别下的自己编写的程序唯一使用共享资源产生了同步锁
指两个或两个以上的线程或进程在执行程序的过程中,因争夺资源而相互等待的一个现象如图所示。
2、什么是递归锁
在Python中为了支持同一个线程中多次请求同一资源,Python提供了可重入锁这个RLock内部维护着一个Lock和一个counter
变量,counter记录了acquire的次数从而使得资源可以被多次require。直到一个线程所有的acquire都被release其他的线程財能获
1、什么是信号量?
同进程的一样semaphore管理一个内置的计数器,每当调用acquire()时内置函数-1每当调用release()时内置函数+1。
计数器不能为0当计数器为0时acquire()将阻塞线程,直到其他线程调用release()