Python全局解释器锁(GIL)

GIL应该是面试的一个常考题,什么是GIL?

GIL的全程是Global Interpre Lock(全局解释器锁)。

不是Python中有GIL,而是CPython中有全局解释器锁。(JPython中没有GIL)

GIL是一个互斥锁,CPython在执行多线程的时候并不是线安全的,为了程序的安全性考虑了全局解释器锁。

每个CPU在同一时间只能执行一个线程。

在Python多线程下,每个线程的执行都需要进行锁的竞争,只有拿到GIL的线程才能执行。

由于GIL的存在,python里一个进程永远只能同时执行一个线程,这就是为什么多核CPU上,python的多线程效率并不高。

因为GIL的存在,python的多线程对CPU密集型代码并不友好,对IO密集性代码比较友好。

1因为计算密集型的程序,需要占用系统资源。

GIL的存在,相当于始终在进行单线程运算,速度慢。

2.IO密集型影响不大的原因,IO,input/output,这两个词就表明程序的瓶颈在于输入
所消耗的时间,线程大部分时间再等待,所以他们是多个一起等(多线程)还是单个等(单线程)无所谓

多线程是共享内存的,即这些线程共用一个内存地址。好处在于便于线程间数据通信
和数据同步
多进程,各个进程地址之间是独立的内存地址。这样不存在地址之间通信就麻烦了

原文地址:https://www.cnblogs.com/materfont/p/9445936.html

时间: 2024-10-11 10:31:55

Python全局解释器锁(GIL)的相关文章

python 什么是全局解释器锁GIL

什么是全局解释器锁GIL Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行.对Python 虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行. 在多线程环境中,Python 虚拟机按以下方式执行: 1. 设置GIL2. 切换到一个线程去运行3. 运行:    a. 指定数量的字节码指令,或者 b.

python 全局解释锁GIL

Python的全局解释器锁GIL用于保护python解释器,使得任意时刻,只有一个线程在解释器中运行.从而保证线程安全 在多线程环境中,Python 虚拟机按以下方式执行: 1. 设置GIL2. 切换到一个线程去运行3. 运行:    a. 指定数量的字节码指令,或者 b. 线程主动让出控制(可以调用time.sleep(0))4. 把线程设置为睡眠状态5. 解锁GIL6. 再次重复以上所有步骤 由上可知,至少有两种情况python会解锁GIL,做线程切换:一是一但有IO操作时:线程连续执行了一

全局解释器锁--GIL

参考博客:https://www.cnblogs.com/mindsbook/archive/2009/10/15/thread-safety-and-GIL.html    https://www.cnblogs.com/MnCu8261/p/6357633.html http://python.jobbole.com/87743/ 一.前言 在多核cpu的背景下,基于多线程以充分利用硬件资源的编程方式也不断发展,也就是在同一时间,可以运行多个任务.但是Cpython中由于GIL的存在,导致同

Python 36 GIL全局解释器锁

一:GIL全局解释器锁介绍 在CPython中,全局解释器锁(或GIL)是一个互斥锁, 它阻止多个本机线程同时执行Python字节码.译文:之所以需要这个锁, 主要是因为CPython的内存管理不是线程安全的.(然而,由于GIL的存在, 其他特性已经变得依赖于它所执行的保证.) 1. 什么是GIL全局解释器锁GIL本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一进程内的多个线程必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,即同一进程下的多个线程无法实现并行

python开发线程:线程&守护线程&全局解释器锁

一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 官网链接:https://docs.python.org/3/library/threading.html?highlight=threading# 二 开启线程的两种方式 #方式一 from threading import Thread import time def sayhi(name): time.sleep(2) print('%s

117 GIL全局解释器锁

一.GIL全局解释器锁 cpython中自带的GIL全局解释器,GIL本身就是一把互斥锁 重点:因为有了GIL全局解释器锁,导致了在同一进程的同一时刻只有一个线程在执行,无法利用多核优势 其实就算我们在程序中写了一个线程的并行操作,实际上GIL会因为垃圾回收机制的问题,操作系统调度的问题,会把并行的线程还是变成了串行,这正是这个GIL全局解释器锁导致了同一进程的同一时刻只有一个线程在运行, Python代码的执行由Python虚拟机(也叫解释器主循环)来控制.Python在设计之初就考虑到要在主

GIL全局解释器锁及协程

GIL全局解释器锁 1.什么是GIL全局解释器锁 GIL本质是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL同一进程内的多线程,必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,即同一进程下的多个线程无法实现并行,但可以实现并发 Cpython解释器下想实现并行可以开启多个进程 2.为何要有GIL 因为Cpython解释器的垃圾回收机制不是线程安全的,保证了数据的安全 3.GIL全局解释器的优缺点 优点:保证了数据安全 缺点:单个进程下开启多个线程只能实现并发不能实现并行

Python之路44-进程与线程区别和GIL全局解释器锁

进程 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就成为进程,程序和进程的区别,程序是指令的集合,它是进程运行的静态描述文本,进程是程序的一次执行活动,属于动态概念 有了进程为什么还要有线程? 进程只能同一时间干一件事 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖此输入的数据,也将无法执行 线程 线城是操作系统能够进行运算调度的最小单位,它包含在进程中,是进程的实际运行单位 进程和线程的区别 线程共享创建它的进程的

Python进程与线程及GIL(全局解释器锁)

MarkdownPad Document 进程与线程 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种一个程序在一个数据集上的一次动态执行过程就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次执行活动,属于动态概念.进程一般由程序.数据集.进程控制块三部分组成. 有了进程为什么还要有线程呢? 因为进程还是有缺陷的: 进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了 进程在执行的过程中如果阻塞,例