虽然GIL在编程中显得很慢,但是实际上最大的性能瓶颈是我……
GIL是个啥?
GIL——global interpreter lock(全局解释器锁):防止线程之间起冲突,防止两个线程同时运行字节码,防止两个线程同时对一个变量进行操作。
为什么会存在GIL锁?
在python中,主要通过引用计数来进行内存管理,每个在python中创建的对象都会有一个计数,当对象的计数等于0的时候,python就会释放其所占用的内存。
如果没有GIL锁,当多个线程同时去调用一个对象的时候,有可能会导致计数只增加1,而进程结束的时候,提前将计数归0,导致其他线程再次访问该对象的时候,无法找到有效的内存,导致出错;另一种情况:当计数正常增加,而同时结束的时候,就会导致计数只减一,没有归零,导致内存无法被释放,造成内存泄漏。
因为可能出现上述问题,python引入了GIL锁,让同一时刻只有一个线程可以在运行,防止多个线程同时对一个资源的竞争。这也是python运行速度相对其它语言来说很慢的主要原因之一
另一个主要原因是因为python是解释型语言,它会在执行的时候同时编译代码,消耗大量时间。
GIL锁的缺点
显而易见,拥有GIL锁导致python运行速度缓慢,也无法实现真正意义上的多线程并发,即使是一个多线程的任务,实际上也就只有一个线程在工作,无法发挥多核处理器的性能。
GIL锁的优点
GIL锁的优点就是解决上面因为python的内存管理机制而造成的线程安全风险(虽然还是有可能会出现竞争冒险。
在python刚诞生的时候,由于硬件上的限制,当时市面上普遍都是单核处理器,所以导致GIL带来的运行速度问题并没有那么明显,随着科技的发展,现在大量多核处理器的出现,使这个问题越来越明显。
因为python拥有庞大的三方库,应用领域广,拥有良好的社区,语法简介,利于快速开发,所以python目前在市面上还是十分受欢迎。