V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
quxl
V2EX  ›  Python

Python GIL 是什马?求解~~~

  •  
  •   quxl · 2015-03-16 13:00:06 +08:00 · 4640 次点击
    这是一个创建于 3570 天前的主题,其中的信息可能已经有所发展或是发生改变。

    老听人说GIL,GIL的,求大神解释 GIL 如何是什么,以及怎么影响Python 多核能力了。

    第 1 条附言  ·  2015-03-17 13:20:02 +08:00
    已基本了解。多谢各位。那咱们来讨论讨论 如何才能突破这种限制吧
    12 条回复    2015-03-21 12:57:51 +08:00
    nine
        1
    nine  
       2015-03-16 13:15:06 +08:00   ❤️ 1
    多线程是抢占式的。
    只能用到单核。
    多个线程去抢一个核的资源,谁抢到谁用。
    想用多核就起多进程。
    高io的可以用多线程。
    高cpu的放弃。
    dant
        2
    dant  
       2015-03-16 13:25:38 +08:00 via iPhone
    全局解释器锁

    同时只能有一个 Python 线程在运行
    liprais
        3
    liprais  
       2015-03-16 13:29:54 +08:00
    提问之前先搜索......
    messense
        4
    messense  
       2015-03-16 13:33:12 +08:00
    jokester
        5
    jokester  
       2015-03-16 13:48:58 +08:00
    At any time, only **1 python thread** can be active.
    fanzeyi
        6
    fanzeyi  
       2015-03-16 13:51:51 +08:00
    ryd994
        7
    ryd994  
       2015-03-16 13:56:03 +08:00 via Android
    简单来讲python的计算都是单线程的。GIL会是个锁,无论哪个线程在计算就挂上。
    不过例外是IO,IO等待时
    GeekGao
        8
    GeekGao  
       2015-03-17 00:37:20 +08:00
    简单的说,GIL是虚拟机级别的互斥手段,保证Python字节码指令在多线程环境下不会被乱入啊,保证Python GC不会被“多P”啊(引用计数被其他线程破坏掉)
    GeekGao
        9
    GeekGao  
       2015-03-17 00:43:57 +08:00
    过去我们活在一个相对low逼的年代。CPU就一个,就一个core (SMP那个时候好像还太高端没上市呢吧)。由于单核多线程也是同一时刻只能运行一条指令。。。所以GIL这种机制的设计当时看起来也没啥问题。
    现在这个年代我们都高大上了,diaosi 也用得起多核CPU了,但一个解释器实例的GIL机制依然像过去那样让我们同一个时刻只能运行一条指令。所以你的问题来了。

    所以。解决多核计算问题,diaosi们最简单的是创建多个解释器实例,用起多进程来搞了。
    SunisDown
        10
    SunisDown  
       2015-03-17 09:50:35 +08:00
    GIL(Global Interpreter Lock) 是解释器全局锁,用来互斥线程对于Python虚拟机的使用.

    (BLOG)[http://sunisdown.me/2015/02/03/python_gil/index.html]
    JoeShu
        11
    JoeShu  
       2015-03-17 11:45:13 +08:00
    就像你们公司的领导,手下干活都要向他汇报。
    x14oL
        12
    x14oL  
       2015-03-21 12:57:51 +08:00
    总结:
    由于GIL的存在,导致原生的python只是一个伪多线程。
    但是即便这样,多线程依然可以用在IO频繁、网络请求的场景。
    追求效率的话使用多进程的方式来运行程序。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4370 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:33 · PVG 13:33 · LAX 21:33 · JFK 00:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.