GIL(全局解释器锁)

来一道GIL面试题

  描述python GIL的概念,以及他对python多线程的影响,编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否比单线程有所提升,并解释原因。

  参考答案:

      1.python语言和GIL没有关系,仅仅是由于历史原因在CPython虚拟机(解释器),难以移除GIL

      2.GIL:全局解释器锁,每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码

      3.线程是放GIL的情况:在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后必须重新获取GIL 

      4.python使用多进程是可以利用多核的资源的

      5.多线程爬取比单线程有提升,因为遇到IO阻塞会自动释放GIL锁

为python喊冤

  GIL全局解释锁与python没有一点的关系,只是跟cPython解释有关,那什么由解释器呢?我们都知道,机器只认得0,1这样组成的数字,而我们写的代码却不是,那么我们就就需要将我们写的代码转化为机器认识的0,1,那么解释器就是干了这么一件事。然而解释可以用c,java,c#等其他语言写,但python官网推荐是c写的解释器,人们就叫他cpython.java也写过一个解释器叫Jpython.而cpython解释器中有GIL,Jpython中没有。

 

GIL特点

   1.保证同一时刻只有一个线程在做,不管是主线程,还是子线程。记住,只是对线程,

    2.他会在合适的时间转到其他线程上执行,比如IO阻塞的时候,他不会等待,而是执行其他的线程

   3.计算密集型程序(用进程)能比较直观的体现出他的缺点,IO密集型程序(线程,协程)体现的就不是那么的明显

 

python之父声明概要

    想要移除GIL不是一件容易的事情,要想使用多任务,多使用进程呗

解决GIL的方法   

   1.换解释器

    2.用其他的语言来实现该部分的功能,python是一种胶水性的语言,其可以调用其他语言写的程序

 

转载于:https://www.cnblogs.com/117698ai/p/11456279.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值