cpython中自帶的GIL全局解釋器,GIL自己就是一把互斥鎖python
重點:由於有了GIL全局解釋器鎖,致使了在同一進程的同一時刻只有一個線程在執行,沒法利用多核優點
程序員
其實就算咱們在程序中寫了一個線程的並行操做,實際上GIL會由於垃圾回收機制的問題,操做系統調度的問題,會把並行的線程仍是變成了串行,這正是這個GIL全局解釋器鎖致使了同一進程的同一時刻只有一個線程在運行,安全
Python代碼的執行由Python虛擬機(也叫解釋器主循環)來控制。Python在設計之初就考慮到要在主循環中,同時只有一個線程在執行。雖然 Python 解釋器中能夠「運行」多個線程,但在任意時刻只有一個線程在解釋器中運行。多線程
對Python虛擬機的訪問由全局解釋器鎖(GIL)來控制,正是這個鎖能保證同一時刻只有一個線程在運行。函數
在多線程環境中,Python 虛擬機按如下方式執行:操作系統
在調用外部代碼(如 C/C++擴展函數)的時候,GIL將會被鎖定,直到這個函數結束爲止(因爲在這期間沒有Python的字節碼被運行,因此不會作線程切換)編寫擴展的程序員能夠主動解鎖GIL。線程
由於cpython自帶的垃圾回收機制不是線程安全的,因此要有GIL鎖.設計
致使了同一個進程下,同一時間只能運行一個線程,沒法利用多核優點.code