
老听人说GIL,GIL的,求大神解释 GIL 如何是什么,以及怎么影响Python 多核能力了。
1 nine 2015 年 3 月 16 日 多线程是抢占式的。 只能用到单核。 多个线程去抢一个核的资源,谁抢到谁用。 想用多核就起多进程。 高io的可以用多线程。 高cpu的放弃。 |
2 dant 2015 年 3 月 16 日 via iPhone 全局解释器锁 同时只能有一个 Python 线程在运行 |
3 F281M6Dh8DXpD1g2 2015 年 3 月 16 日 提问之前先搜索...... |
4 messense 2015 年 3 月 16 日 |
5 jokester 2015 年 3 月 16 日 At any time, only **1 python thread** can be active. |
6 fanzeyi 2015 年 3 月 16 日 |
7 ryd994 2015 年 3 月 16 日 via Android 简单来讲python的计算都是单线程的。GIL会是个锁,无论哪个线程在计算就挂上。 不过例外是IO,IO等待时 |
8 R4rvZ6agNVWr56V0 2015 年 3 月 17 日 简单的说,GIL是虚拟机级别的互斥手段,保证Python字节码指令在多线程环境下不会被乱入啊,保证Python GC不会被“多P”啊(引用计数被其他线程破坏掉) |
9 R4rvZ6agNVWr56V0 2015 年 3 月 17 日 过去我们活在一个相对low逼的年代。CPU就一个,就一个core (SMP那个时候好像还太高端没上市呢吧)。由于单核多线程也是同一时刻只能运行一条指令。。。所以GIL这种机制的设计当时看起来也没啥问题。 现在这个年代我们都高大上了,diaosi 也用得起多核CPU了,但一个解释器实例的GIL机制依然像过去那样让我们同一个时刻只能运行一条指令。所以你的问题来了。 所以。解决多核计算问题,diaosi们最简单的是创建多个解释器实例,用起多进程来搞了。 |
10 SunisDown 2015 年 3 月 17 日 GIL(Global Interpreter Lock) 是解释器全局锁,用来互斥线程对于Python虚拟机的使用. (BLOG)[http://sunisdown.me/2015/02/03/python_gil/index.html] |
11 JoeShu 2015 年 3 月 17 日 就像你们公司的领导,手下干活都要向他汇报。 |
12 x14oL 2015 年 3 月 21 日 总结: 由于GIL的存在,导致原生的python只是一个伪多线程。 但是即便这样,多线程依然可以用在IO频繁、网络请求的场景。 追求效率的话使用多进程的方式来运行程序。 |