1. 程式人生 > >Python 學習之 GIL

Python 學習之 GIL

1、python 全域性翻譯鎖(GIL Global Interpreter Lock)

為了實現在多核環境下的執行時資料的一致性,Python採用加鎖的思想來實現這種同步和一致性,這把鎖就是GIL。這造成了一定量的效能損失,使用鎖的原因是因為Python直譯器內部是執行緒不安全的。

另外一點,首先需要明確的一點是 GIL 並不是Python的特性,它是在實現Python解析器(CPython)時所引入的一個概念。就好比C++是一套語言(語法)標準,但是可以用不同的編譯器來編譯成可執行程式碼。有名的編譯器例如GCC,INTEL C++,Visual C++等。Python也一樣,同樣一段程式碼可以通過CPython,PyPy,Psyco等不同的Python執行環境來執行。像其中的JPython就沒有GIL。然而因為CPython是大部分環境下預設的Python執行環境。所以在很多人的概念裡CPython就是Python,也就想當然的把 GIL 歸結為Python語言的缺陷。所以這裡要先明確一點:GIL並不是Python的特性,Python完全可以不依賴於GIL

Python的多執行緒雖然是真正的多執行緒,並非虛擬出來的多執行緒,但是由於GIL的存在導致了python在多執行緒執行程式的時候,有可能會比單執行緒執行還要慢,但是可以採用多程序的方式來執行多工,因為多程序的時候每個程序都有一個GIL,互相不影響。