全局解释器锁
每个CPU在同一时间只能执行一个线程,那么其他的线程就必须等待该线程的全局解释器,,使用权消失后才能使用全局解释器,即使多个线程直接不会相互影响在同一个进程下也只有一个线程使用cpu,这样的机制称为全局解释器锁。
好处:避免了大量的加锁解锁的好处。使数据更加安全,解决多线程间的数据完整性和状态同步。
缺点:多核处理器退化成单核处理器,只能并发不能并行。
同步锁
同一时刻的一个进程下的一个线程只能使用一个cpu,要确保这个线程下的程序在一段时间内被cpu执,那么就要用到同步锁。
原因:因为有可能当一个线程在使用cpu时,该线程下的程序可能会遇到io操作,那么cpu就会切到别的线程上去,这样就有可能会影响到该程序结果的完整性。
死锁
1.单线程的死锁
单线程的死锁一般是人为代码逻辑的错误,造成的死锁。比如在一段代码中,自己还没有释放锁,就重新想要去获取锁,就会造成死锁。
2.多进程或者线程的死锁
当多个进程或者线程在执行的过程中,因为资源争夺而造成的一种互相等待拿到对方所占有的锁的时候.就会造成死锁。
递归锁又叫可重入锁
1.可重入锁是用来解决死锁的,其实就是一个锁对象可以被一个线程重复多次使用,在同一个进程或者线程如果要锁不同的地方,需要使用多个锁对象.可重入锁的原理就是,它在内部维护一个计数器,初始值是0.当遇到这个锁对象acquire()的时候计数就加1,当遇到release()的时候,计数就减一.它解决死锁的原理就是,当有另外线程要操作相同的资源的时候,会先去检查这个计数,只有当这个计数为0的时候,才会让其获取这段资源的使用权.否则就会等待。
乐观锁
假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
悲观锁
假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。