面试必备之 GIL(全局解释器锁)
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(全局解释器锁)相关推荐
- gil php,网络编程之多线程——GIL全局解释器锁
网络编程之多线程--GIL全局解释器锁 一.引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that preven ...
- Python中的GIL(全局解释器锁)
1. GIL全称Global Interpreter Lock,每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码. 2.GIL的缺点 GIL使Python不能充分利用多核心 ...
- python基础--GIL全局解释器锁、Event事件、信号量、死锁、递归锁
ps:python解释器有很多种,最常见的就是C python解释器 GIL全局解释器锁: GIL本质上是一把互斥锁:将并发变成串行,牺牲效率保证了数据的安全 用来阻止同一个进程下的多个线程的同时执行 ...
- 【Python爬虫学习笔记11】Queue线程安全队列和GIL全局解释器锁
Queue线程安全队列 在Python多线程编程中,虽然threading模块为我们提供了Lock类和Condition类借助锁机制来处理线程并发执行,但在实际开发中使用加锁和释放锁仍是一个经常性的且 ...
- 并发服务器的信号传递,使服务器支持并发、GIL全局解释器锁、死锁和Rlock、信号量、event事件、...
服务器的并发实现: 服务端: importsocketfrom threading importThread"""服务端 1.要有固定的IP和PORT 2.24小时不间断 ...
- Python高级——GIL全局解释器锁问题
GIL全局解释器锁 GIL全局解释器锁是cpython解释器内部的一把锁,和python中的lock锁不是一个层面. GIL产生的背景:在cpython解释内部运行多个线程的时候,每个线程都需要解释器 ...
- 4,GIL全局解释器锁,event事件,信号量
今日内容 1,GIL全局解释器锁 2,死锁 3,信号量 4,event事件 5,队列一:GIL全局解释器锁 什么是GIL 全局解释器锁: 它的本质也是一把互斥锁,是在CPython解释器锁,将并发变为 ...
- Python GIL全局解释器锁
目录 GIL全局解释器锁 一.引入: 二.GIL介绍 三.GIL与Lock 四.GIL与多线程 总结 GIL全局解释器锁 一.引入: 首先要明白,GIL并不是Python的一个特性,其实在我们通常所称 ...
- python gil 解除_详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
先看一道GIL面试题: 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. GIL:又叫全局解 ...
- python gil锁存在的意义_关于python的GIL全局解释器锁的简单理解
GIL是解释器内部的一把锁,确切一点说是CPython解释器内部的一把锁,所以要注意区分 这和我们在Python代码中使用线程锁Lock并不是一个层面的概念. 1. GIL产生的背景: 在CPytho ...
最新文章
- iOS开发中的 地区转经纬 经纬度转地区
- python手机版iphone-只会Python可造不出iPhone
- 网络编程学习笔记(gethostbyname函数)
- 数论--费马小定理求逆元
- rocketmq java home,rocketmq 安装与配置以及遇到的问题
- java图形界面颜色随机变换,JavaScript实现鼠标移入随机变换颜色
- raspberry pi3_我们将赠送Raspberry Pi 3 Ultimate Starter Kit
- 归并排序的java语言_归并排序 java语言
- 响应已被截断_技术:RWD响应式网站网页设计基本原则
- ad20如何画出pcb板大小_PCB板过孔对高频信号传输的影响,一定要重视
- 容大热敏打印机打印纸张出半截,测试页不出嗡嗡响
- 最新 PMP 考试真题概要及答案分析(中文版)(1)
- 软件开发过程中的一些感悟
- Java中的JPA是什么意思?
- highchart drilldown钻取
- 行人重识别——评价标准
- Vue + element-ui合并单元格后,checkbox多选单选取值问题
- 雷军2001年去搜狐见张朝阳不是为面试 而是给卓越网拉融资
- 让第一个版本的系统混乱一点,或许是件好事
- CSS float浮动的深入研究、详解及拓展 一 一 一 一 一 一 一 一