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 模塊文件。

另請參閱:

程序漏洞和使用場景 設備硬件 綫程進程的關係 産生原因

版權聲明: 本文為獨傢原創稿件,版權歸 樂數軟件 ,未經許可不得轉載。