Python中的GIL(全局表明器锁)

分享
源代码 2024-9-23 04:22:48 33 0 来自 中国
GIL的存在使得python中的多线程看起来就是假的,python盘算用的更多是多进程
全局表明器锁(英语:Global Interpreter Lock,缩写GIL),是盘算机步调计划语言表明器用于同步线程的一种机制,它使得任何时候仅有一个线程在实行。即便在多核心处理处罚器上,利用 GIL 的表明器也只答应同一时间实行一个线程。常见的利用 GIL 的表明器有CPython与Ruby MRI。

CPython的线程是操纵体系的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操纵体系调治线程的实行。一个Python表明器进程内有一个主线程,以及多个用户步调的实行线程。即便利用多核心CPU平台,由于GIL的存在,也将克制多线程的并行实行。
Python表明器进程内的多线程是以协作多使命方式实行。当一个线程碰到I/O使命时,将释放GIL。盘算麋集型(CPU-bound)的线程在实行约莫100次表明器的计步(ticks)时,将释放GIL。计步(ticks)可大抵看作Python假造机的指令。计步现实上与时间片长度无关。可以通过sys.setcheckinterval()设置计步长度。
在单核CPU上,数百次的隔断检查才会导致一次线程切换。在多核CPU上,存在严肃的线程颠簸(thrashing)。
Python 3.2开始利用新的GIL。新的GIL实现中用一个固定的超时时间来指示当前的线程放弃全局锁。在当火线程保持这个锁,且其他线程请求这个锁时,当火线程就会在5毫秒后被欺压释放该锁。
可以创建独立的进程来实现并行化。Python 2.6引进了多进程包multiprocessing。大概将关键组件用C/C++编写为Python扩展,通过ctypes使Python步调直接调用C语言编译的动态链接库的导出函数。
深入明白Python中的GIL(全局表明器锁)。 - 知乎 (zhihu.com)
全局表明器锁 - 维基百科,自由的百科全书 (wikipedia.org)
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 18:47, Processed in 0.235709 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表