美文网首页
python的GIL

python的GIL

作者: xhz的个人小屋 | 来源:发表于2018-04-30 15:54 被阅读0次

In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.)

在Cpython解释器中(cpyhton是大多数python版本的解释器),全局锁GIL是个互斥体,它阻止多个本地线程同时执行Python字节码。这个锁是很有必要的,主要因为cpython的内存管理不是线程安全的。(然而,因为GIL的存在,其他的特性强制依赖于这个特性。)

GIL的只是一种概念,存在于Cpython解释器中,其他python解释器如Jpython是没有的。GIL并不是Python的特性,Python完全可以不依赖于GIL。

在多核心的情况下,多线程的执行可能比单线程还要慢

Python的多线程在多核CPU上,只对于IO密集型计算产生正面效果;而当有至少有一个CPU密集型线程存在,那么多线程效率会由于GIL而大幅下降。

如何避免GIL的影响?

用multiprocess替代Thread

multiprocess库的出现很大程度上是为了弥补thread库因为GIL而低效的缺陷。它完整的复制了一套thread所提供的接口方便迁移。唯一的不同就是它使用了多进程而不是多线程。每个进程有自己的独立的GIL,因此也不会出现进程之间的GIL争抢。

当然multiprocess也有缺点。它的引入会增加程序实现时线程间数据通讯和同步的困难。对于数据共享来说,只能通过在主线程申明一个Queue,put再get或者用share memory的方法。线程的之间的数据共享比进程要快很多。

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

相关文章

  • GIL

    一,GIL的概念 python全局解释器锁。 二,GIL产生的原因 GIL 并不是 Python 语言的特性,它是...

  • Python day28_GIL 深拷贝浅拷贝

    GIL(全局解释器锁) GIL面试题如下 描述Python GIL的概念, 以及它对python多线程的影响?编写...

  • 线程安全,GIL全局锁

    1. GIL是什么? GIL不是Python特性GIL是实现Python解释器(Cpython)时引入的概念,而C...

  • Python高级语法1:GIL锁&浅拷贝&深拷贝

    一、GIL锁 1.1、GIL面试题:描述Python GIL的概念, 以及它对python多线程的影响?编写一个多...

  • python入门系列:多线程

    python中的GIL GIL(Global Interpreter Lock),就是一个锁。 Python中的一...

  • python中的GIL详解

    原文链接 GIL并不是Python的特性,Python完全可以不依赖于GIL。 ​ GIL 锁: 全局解释器锁,作...

  • python之理解GIL

    python之理解GIL 1、GIL简介 GIL的全称为Global Interpreter Lock,全局解释器...

  • 008 12. python提高-1

    12.1. GIL GIL(全局解释器锁) GIL面试题如下 描述Python GIL的概念, 以及它对pytho...

  • python多线程

    python基础之多线程锁机制 GIL(全局解释器锁) GIL并不是Python的特性,它是在实现Python解析...

  • Python_提高

    GIL全局解释器锁 描述Python GIL的概念, 以及它对python多线程的影响?编写⼀个 多线程抓取⽹⻚的...

网友评论

      本文标题:python的GIL

      本文链接:https://www.haomeiwen.com/subject/gtnzlftx.html