GIL 全局解释器锁 解决办法


Python 是解释型语言,使用解释器直接将源代码解析成二进度代码就可运行 (不用编译)。

C/C++ 等编译型编程语言,需要将源代码编译成二进制可执行代码后才可执行。

 

  1. GIL 锁

  2. CPython 解释器本身的 GIL (全局解释器锁) 技术,会将应用程序牢牢绑定到单物理线程。

    不管 CPU 有多少物理核心,多少物理线程,GIL 技术强制使用单物理线程。

    在 GIL 技术下,若一个应用程序同时运行几个软线程,应用程序可能会频繁崩溃。

    因为一个软线程未运行完成,另一个软线程再运行,将导致此 CPU 物理线程过于繁忙而崩溃。

  3. Multi-process

  4. 将要同时运行的几个软线程,分别放到不现进程中。

  5. 协程

  6. 将要同时运行的几个软线程,按类似协程的方式顺序运行。

  7. 线程互锁

  8. 当一个软线程在运行时,另一个就不能运行。

  9. 异步执行

  10. 使所有软线程,尽可能异步运行。

  11. 其它解释器

  12. 使用 Jython、PyPy 等其它解释器实现。

  13. Cython

  14. 使用 C C++ Cython 等其它编程语言,实现存在性能瓶颈的代码部分。

    当采用 Cython 时,主要是使用 with gil with nogil 编写 *.PYX 模块文件。

See also:

程序漏洞和使用场景 设备硬件 线程进程的关系 产生原因

Copyright Notice: This article is exclusive original manuscripts, copyrighted by Happy Digits Software , shall not be reproduced without permission.