Python與全域性直譯器鎖
全域性直譯器鎖(Global Interpreter Lock,簡稱CI.)是計算機程式設計語言直譯器用於同步執行緒的工具,保證任何時刻僅有一個執行緒在執行
首先要申明的是,全域性直譯器鎖並不是Python語言的特性,全域性直譯器鎖是為了實現Pythoo直譯器(主要是CPython,最流行的Python直譯器)而引人的概念,並不是所有Python直譯器都有全域性直譯器鎖。Jython和lronPython沒有全域性直譯器鎖,可以完全利用多處理器系統。PyPy和CPython都有全域性直譯器鎖。
CPython的執行緒是作業系統的原生執行緒,完全由作業系統排程執行緒的執行。一個CPython直譯器程式內有一個主執行緒以及多個使用者程式的執行執行緒。即使使用多核心CPU平臺,由於全域性直譯器鎖的存在,也將禁止多執行緒的並行執行,這樣會損失許多多執行緒的效能。
在CPython中,全域性直譯器鎖是一個互斥鎖,用於保護對Python物件的訪問,防止多條執行緒同時執行Python位元組碼。這種鎖是必要的,主要是因為CPython的記憶體管理不是執行緒安全的。
在多執行緒環境中,CPython虛擬機器按以下方式執行:
(1)設定全域性直譯器鎖。
(2)切換到一個執行緒中去執行。
(3)執行:
①指定數量的位元組碼指令;
②執行緒主動讓出控制[可以呼叫time.sleep(0)]
(4)把執行緒設定為睡眠狀態。
(5)解鎖全域性直譯器鎖。
(6)再次重複以上所有步驟。
在呼叫外部程式碼(如C/C++擴充套件函式)的時候,全域性直譯器鎖將會被鎖定,直到這個函式結束為止(因為在這期間沒有Python的位元組碼被執行,所以不會做執行緒切換)。
相關文章
- Python GIL(全域性直譯器鎖)Python
- 什麼是Python全域性直譯器鎖(GIL)?全域性直譯器鎖的好處!Python
- python之GIL全域性直譯器鎖,自定義互斥鎖,死鎖與遞迴鎖Python遞迴
- Python提高:關於GIL(全域性直譯器鎖)與執行緒互斥鎖的理解Python執行緒
- Python培訓教程:什麼是Python全域性直譯器鎖(GIL)?Python
- Python 新提案:“廢除”全域性直譯器鎖 GIL | CPython 直譯器或許會變得更快Python
- C++呼叫PythonAPI執行緒狀態和全域性直譯器鎖C++PythonAPI執行緒
- python GIL 全域性鎖Python
- 全域性鎖、表鎖、行鎖
- 全域性鎖和表鎖
- python直譯器在哪Python
- MySQL 全域性鎖和表鎖MySql
- Python3 直譯器Python
- MySQL全域性鎖、表鎖以及行鎖MySql
- Python直譯器有幾種Python
- python直譯器的安裝Python
- Python直譯器和IPythonPython
- 用 Python 實現 Python 直譯器Python
- MySQL鎖問題分析-全域性讀鎖MySql
- 【譯】使用 Python 編寫虛擬機器直譯器Python虛擬機
- Python直譯器分類有哪些?Python
- Python設計模式-直譯器模式Python設計模式
- Python指南(1.1):挑選直譯器Python
- VScode和python直譯器VSCodePython
- MySQL 全域性表和表鎖MySql
- MySQL學習之全域性鎖和表鎖MySql
- python全域性變數與區域性變數Python變數
- 直譯器模式模式
- Python教程分享:Python直譯器分類及版本Python
- Mac 中 Sublime 配置 Python3 直譯器MacPython
- 06.python直譯器及效能優化Python優化
- Python直譯器簡介(1):函式物件Python函式物件
- Python直譯器簡介(2):程式碼物件Python物件
- Python全域性變數與區域性變數詳解Python變數
- 詳解python 區域性變數與全域性變數Python變數
- Ipython 直譯器Python
- 終:直譯器模式模式
- RAC全域性死鎖檢測時間