python中的GIL全局解释器锁

GIL要求:每个线程在执行的过程中都需要先获得GIL,然后才能获得进程的共享的资源,保证同一时刻只有一个线程可以运行.

对于io密集型任务,python的多线程起作用;但对于cpu密集型(计算密集型)的任务,python的多线程几乎不占优势,还有可能由于争夺资源以及GIL的切换占用资源而变慢.

GIL的释放:为了让各个线程能够均衡的利用cpu时间,python的计数器会计算当前线程已经执行的微代码的数量,达到一定阈值时就强制释放GIL,另外就是在线程遇到阻塞.join()方法时释放GIL.

CPython解释器设置GIL的主要原因是为了保证不让多个线程同时执行同一条字节码,这就避免了可能多个线程同时对某个对象进行操作,还有当年还是单核操作系统,这样的设计不会有任何问题.而现在多核操作系统时代反而会有些鸡肋;那么该如何解决这个问题呢?1.更换更快的解释器,比如Jpython解释器(java实现的python解释器);2.使用多进程来完成多任务的处理(这个也是专家的建议).

python解释器分类:

  • CPython解释器 就是用 C 语言开发的了,是官方标准实现,拥有良好的生态

  • IPython 是在 CPython 的基础之上在交互式方面得到增强的解释器

  • Jython 是专为 Java 平台设计的 Python 解释器,它把 Python 代码编译成 Java 字节码执行

  • PyPy 是 Python 语言的的一种快速、兼容的替代实现,以速度块著称.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值