1、GIL是什么

GIL:Global Interpreter Lock又称全局解释器锁。简单来说是一个互斥锁,每个线程在执行的过程中都需要先获取GIL,作用就是限制多线程同时执行,使得在同一进程内任何时刻仅有一个线程在执行。

由于GIL的存在,在Python上开启多个线程时,每个单独线程都会在竞争到GIL后才运行,因此在我们的Python语言中多线程其实是假的多线程,它只会在一个CPU上运行。即使在具有多核CPU中,Python的多线程也是串行执行的,并不会同一时间多个线程分布在多个CPU上运行。

2、GIL的准则

1.当前执行线程必须持有GIL
2.当线程遇到 IO的时、时间片到时或遇到阻塞时, 会释放GIL(Python 3.x使用计时器----执行时间达到阈值后,当前线程释放GIL,或Python 2.x,tickets计数达到100。)

3、GIL的优缺点

优点:

线程是非独立的,所以同一进程里线程是数据共享,当各个线程访问数据资源时会出现“竞争”状态,即数据可能会同时被多个线程占用,造成数据混乱,这就是线程的不安全。所以引进了互斥锁,确保某段关键代码、共享数据只能由一个线程从头到尾完整地执行。

缺点:

单个进程下,开启多个线程,无法实现并行,只能实现并发,牺牲执行效率。

由于GIL锁的限制,所以多线程不适合计算密集型任务,更适合IO密集型任务

常见IO密集型任务:网络IO(抓取网页数据)、磁盘操作(读写文件)、键盘输入

4、面试常见

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

参考答案:

  • GIL:全局解释器锁。每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码。
  • Python语言和GIL没有任何关系。仅仅是由于历史原因在Cpython虚拟机(解释器),难以移除GIL。
  • 线程释放GIL锁的情况: 在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL
  • Python使用多进程是可以利用多核的CPU资源的。
  • 多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁。

面试必备之 GIL(全局解释器锁)相关推荐

  1. gil php,网络编程之多线程——GIL全局解释器锁

    网络编程之多线程--GIL全局解释器锁 一.引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that preven ...

  2. Python中的GIL(全局解释器锁)

    1. GIL全称Global Interpreter Lock,每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码. 2.GIL的缺点 GIL使Python不能充分利用多核心 ...

  3. python基础--GIL全局解释器锁、Event事件、信号量、死锁、递归锁

    ps:python解释器有很多种,最常见的就是C python解释器 GIL全局解释器锁: GIL本质上是一把互斥锁:将并发变成串行,牺牲效率保证了数据的安全 用来阻止同一个进程下的多个线程的同时执行 ...

  4. 【Python爬虫学习笔记11】Queue线程安全队列和GIL全局解释器锁

    Queue线程安全队列 在Python多线程编程中,虽然threading模块为我们提供了Lock类和Condition类借助锁机制来处理线程并发执行,但在实际开发中使用加锁和释放锁仍是一个经常性的且 ...

  5. 并发服务器的信号传递,使服务器支持并发、GIL全局解释器锁、死锁和Rlock、信号量、event事件、...

    服务器的并发实现: 服务端: importsocketfrom threading importThread"""服务端 1.要有固定的IP和PORT 2.24小时不间断 ...

  6. Python高级——GIL全局解释器锁问题

    GIL全局解释器锁 GIL全局解释器锁是cpython解释器内部的一把锁,和python中的lock锁不是一个层面. GIL产生的背景:在cpython解释内部运行多个线程的时候,每个线程都需要解释器 ...

  7. 4,GIL全局解释器锁,event事件,信号量

    今日内容 1,GIL全局解释器锁 2,死锁 3,信号量 4,event事件 5,队列一:GIL全局解释器锁 什么是GIL 全局解释器锁: 它的本质也是一把互斥锁,是在CPython解释器锁,将并发变为 ...

  8. Python GIL全局解释器锁

    目录 GIL全局解释器锁 一.引入: 二.GIL介绍 三.GIL与Lock 四.GIL与多线程 总结 GIL全局解释器锁 一.引入: 首先要明白,GIL并不是Python的一个特性,其实在我们通常所称 ...

  9. python gil 解除_详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案

    先看一道GIL面试题: 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. GIL:又叫全局解 ...

  10. python gil锁存在的意义_关于python的GIL全局解释器锁的简单理解

    GIL是解释器内部的一把锁,确切一点说是CPython解释器内部的一把锁,所以要注意区分 这和我们在Python代码中使用线程锁Lock并不是一个层面的概念. 1. GIL产生的背景: 在CPytho ...

最新文章

  1. SVN可以拉项目但是提交时提示没有权限
  2. 人工智能及其应用(第5版).蔡自兴-3章课后习题。【参考答案】
  3. 体素法滤波(附实现代码)
  4. RHEL5下NFS服务器配置与应用
  5. tomcat常见错误处理
  6. 用Unity3D实现简单的井字棋小游戏
  7. Dubbo(一) 使用Java RMI 实现RPC(远程过程调用)
  8. Android 系统性能优化(37)---Android内存优化之一:MAT使用入门
  9. datagridview单元格合并居中_系统地学习Excel第17课,设置单元格格式
  10. 读书笔记:Sheldon.M.Ross:概率论基础教程:2014.01.22
  11. 单片机音频谱曲软件_基于51单片机音乐播放仿真 乐谱制作软件 音乐资料
  12. 洛谷P1179 [NOIP2010 普及组] 数字统计题解
  13. afrog 发布新版 Release 1.3.6 漫天星辰
  14. cjavapy在线正则表达式测试工具
  15. 写给女孩:二十岁之后的每一年都很重要
  16. 想凭勤奋逆风翻盘?如今靠运气才有更大赢面
  17. python编程midi键盘按键_Python中捕获键盘的方式详解
  18. 学编程,你不能学会了游泳再下水
  19. 使用C++_GDAL剪切大型tif图
  20. Revit机电翻模插件【管线编辑】跨系统分类

热门文章

  1. TensorFlow实现识别手写数字
  2. 守望先锋 服务器不稳定,守望先锋rtt高怎么解决 守望先锋rtt过高不稳定解决办法...
  3. 上汽MG名爵携手哔哩哔哩电竞,达成全面战略合作
  4. Win7 Ghost
  5. 如何注册微信公众号平台的服务号和订阅号
  6. 【两步】教你学会画红黑树
  7. 2021-2027全球与中国厨房安装服务市场情况与未来趋势研究报告
  8. 当我们谈「以消费者为中心」时,实际上在谈什么?| 消费者数字化运营从0到1
  9. javascript全局变量和局部变量详解
  10. 索引原理:联合索引(最左前缀原则)