Python 学习笔记--GIL

Python 全局翻译锁(GIL Global Interpreter Lock)

为了实现在多核环境下的运行时数据的一致性,Python采用加锁的思想来实现这种同步和一致性,这把锁就是GIL。这造成了一定量的性能损失,使用锁的原因是因为Python解释器内部是线程不安全的。

另外一点,首先需要明确的一点是 GIL 并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念。就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码。有名的编译器例如GCC,INTEL C++,Visual C++等。Python也一样,同样一段代码可以通过CPython,PyPy,Psyco等不同的Python执行环境来执行。像其中的JPython就没有GIL。然而因为CPython是大部分环境下默认的Python执行环境。所以在很多人的概念里CPython就是Python,也就想当然的把 GIL 归结为Python语言的缺陷。所以这里要先明确一点:GIL并不是Python的特性,Python完全可以不依赖于GIL

Python的多线程虽然是真正的多线程,并非虚拟出来的多线程,但是由于GIL的存在导致了python在多线程运行程序的时候,有可能会比单线程运行还要慢,但是可以采用多进程的方式来执行多任务,因为多进程的时候每个进程都有一个GIL,互相不影响。

但是至于Python的多线程有没有意义是需要看任务类型的,通常情况下我们的任务可以分成IO密集型任务和计算密集型任务,如果是计算密集型任务,就需要利用多核多线程来实现并发,提升性能,这种情况下,可能Python的多线程就不能很好的利用多核,从而不能提升性能,但是如果是IO密集型任务,CPU的使用本身就不高,此时Python的多线程就能很好的提高CPU的利用率,因为IO的时候,CPU也是闲着。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值