Python——我們能擺脫全域性直譯器鎖嗎?


全域性直譯器鎖 (GIL) 是 Python 中的一個互斥鎖。讓我們首先了解什麼是全域性直譯器鎖 (GIL)——

什麼是 GIL?

全域性直譯器鎖 (GIL) 是一個互斥鎖,它——

  • 保護對 Python 物件的訪問;
  • 防止多個執行緒同時執行 Python 位元組碼;
  • 防止競爭條件;
  • 確保執行緒安全。

Python 直譯器並非完全執行緒安全。為了支援多執行緒 Python 程式,存在一個全域性鎖,稱為全域性直譯器鎖或 GIL。

如果沒有這個鎖,即使是最簡單的操作也可能在多執行緒程式中導致問題:例如,當兩個執行緒同時增加同一物件的引用計數時,引用計數最終可能只增加一次而不是兩次。

GIL 的問題

  • GIL 並非理想,因為它在某些情況下會阻止多執行緒程式充分利用多處理器系統。

  • GIL 會降低效能。

為什麼我們不能移除 GIL?

我們不能移除 GIL,因為:

  • 這會使 Python 的單執行緒效能比 Python 2 慢。

  • 由於 GIL 的存在甚至早於執行緒概念的引入,其他特性已經依賴於它解決的問題。這使得在不破壞某些 Python 庫的情況下移除 GIL 變得更加困難。

可以移除 GIL 嗎?

任何可能的 GIL 替代方案都應該具有以下理想特性:

  • 首先,可能的 GIL 替代方案應該能夠實現。

  • 易於維護並長期存在。

  • 它應該加快單執行緒程式的執行速度。

  • 該方案應該與所有現有 CPython 擴充套件使用的宏原始碼相容。

更新於:2022年9月20日

558 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告