全域直譯器鎖
外觀
這是此頁批准,以及是最近的修訂。
全域直譯器鎖(英語:Global Interpreter Lock,縮寫GIL), 是電腦程式的設計語言直譯器用佇仝步執行緒的一種機制,伊予任何時刻干焦一个執行緒咧執行。就算是多核心處理器,使用 GIL 的直譯器嘛只允准仝一个時間執行一个執行緒。捷看著的使用 GIL 的直譯器有 CPython 佮 Ruby MRI。
Python 的 GIL
- CPython 的執行緒是作業系統的原生執行緒。佇咧 Linux 上為 pthread,佇咧 Windows 上為 Win thread,完全由作業系統排程執行緒的執行。一个 Python 直譯器行程內面有一个主執行緒,猶閣有加一个使用者程式的執行執行緒。就算是多核心 CPU 平台,因為 GIL 的存在矣,嘛會禁止濟執行緒的並列執行。
- Python 直譯器行程內底的多執行緒是以協同運作多工方式執行。做一个執行緒拄著 I / O 做工課的時陣,將釋放 GIL。算密集型(CPU-bound)的執行緒咧執行大約一百擺直譯器的計步(ticks)時,將釋放 GIL。計步(ticks)會當大箍看做 Python 虛擬機器的指令。計步實際上佮時間片長度無關係。會當透過 ` sys . setcheckinterval ( ) ` 設定計步長度。
- 佇單核 CPU 上,數百擺的隔檢查才會致使一擺執行緒切換。在多核 CPU 上,存在嚴重的執行緒顯顯(thrashing)。
- Python 三允二開始使用新的 GIL。新的 GIL 實在做中用一个固定的超時間來指示當前的執行緒放棄全域鎖。佇古早執行緒保持這鎖,而且其他執行緒請求這鎖的時陣,彼當陣仔執行緒就會佇咧五毫秒了後去予人強制釋放該鎖。
- 會當建立獨立的行程來實際做並列化。Python 二鋪六引進了濟的行程包 multiprocessing。或者是將關鍵組件用 C / C + + 寫為 Python 擴充,透過 ctypes 使 Python 程式直接呼叫 C 我的語言編譯的動態連結庫的匯出函式。