Python GIL 是什马?求解~~~

2015-03-16 13:00:06 +08:00
 quxl

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

4598 次点击
所在节点    Python
12 条回复
nine
2015-03-16 13:15:06 +08:00
多线程是抢占式的。
只能用到单核。
多个线程去抢一个核的资源,谁抢到谁用。
想用多核就起多进程。
高io的可以用多线程。
高cpu的放弃。
dant
2015-03-16 13:25:38 +08:00
全局解释器锁

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

所以。解决多核计算问题,diaosi们最简单的是创建多个解释器实例,用起多进程来搞了。
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
2015-03-17 11:45:13 +08:00
就像你们公司的领导,手下干活都要向他汇报。
x14oL
2015-03-21 12:57:51 +08:00
总结:
由于GIL的存在,导致原生的python只是一个伪多线程。
但是即便这样,多线程依然可以用在IO频繁、网络请求的场景。
追求效率的话使用多进程的方式来运行程序。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/177237

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX