GIL 全局解释器锁 解决办法


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

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

 

  1. GIL 锁

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

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

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

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

  3. 多进程

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

  5. 协程

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

  7. 线程互锁

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

  9. 异步执行

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

  11. 其它解释器

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

  13. Cython

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

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

另请参阅:

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

版权声明: 本文为独家原创稿件,版权归 乐数软件 ,未经许可不得转载。