GIL(全局解释器锁)(只在cpython里才有):
概述:在同一个进程中只要有一个线程获取了全局解释器(cpu)的使用权限,那么其他的线程就必须等待该线程的全局解释器(cpu)使用权消失后才能使用全局解释器(cpu),即时多个线程之间不会相互影响在同一个进程下也只有一个线程使用cpu,这样的机制称为全局解释器锁(GIL)。
作用:限制多线程同时执行,保证同一时间只有一个线程执行,所以cpython里的多线程其实是伪多线程!
所以Python里常常使用协程技术来代替多线程,协程是一种更轻量级的线程,进程和线程的切换时由系统决定,而协程由我们程序员自己决定,而模块gevent下切换是遇到了耗时操作才会切换
优点:避免了大量加锁解锁的过程
保证了数据安全,解决多线程间的数据完整性和状态同步
缺点:多核处理变为蛋壳处理,只能并发不能并行
由于GIL是历史残留的影响,GIL锁产生的问题并不能完全消除,当线程中产生GIL锁时,其实多线程已经变成了单线程.
Python虽然不能利用多线程实现多核任务,但可以通过多进程实现多核任务。多个Python进程有各自独立的GIL锁,互不影响