python GIL

一、GIL全称global interpreter lock,顾名思义,是一个全局的锁;

二、GIL是python解释器(CPython)所引入,不用CPython的解释器不受此限制;

三、GIL的存在会对多线程运行效率有很大影响,甚至比不过单线程运行效率;

    比如:当前有4核CPU,我们开了4个线程,每个线程被分配在4个核上。由于GIL的存在,同一时间点,只有一个线程获得锁,也就是说,4个核上,同一时间点只有一个线程在被执行。

    上述是对于CPU密集型运算的线程而言,当线程为IO密集型,情况可能会好一点,因为IO密集型线程在等待IO时,会释放GIL,从而提高部分效率。

 

四、GIL影响很大,修改很麻烦,因为有很多的模块都用了GIL;

五、如何避免?

1、利用multiprocess模块替代Thread,multiprocess是python的多进程模块,当多进程时,每个进程都有一个GIL,所以就不会有所得问题。

2、放弃使用CPython解释器,改动量巨大,基本不可能

3、对于IO密集型,可以使用IO多路复用、异步IO等机制实现。

但是进程间共享数据会比较麻烦,编程时需要注意。

 

参考链接:http://python.jobbole.com/81822/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值