python中的GIL全局解釋器鎖

GIL要求:每個線程在執行的過程中都需要先獲得GIL,然後才能獲得進程的共享的資源,保證同一時刻只有一個線程可以運行.

對於io密集型任務,python的多線程起作用;但對於cpu密集型(計算密集型)的任務,python的多線程幾乎不佔優勢,還有可能由於爭奪資源以及GIL的切換佔用資源而變慢.

GIL的釋放:爲了讓各個線程能夠均衡的利用cpu時間,python的計數器會計算當前線程已經執行的微代碼的數量,達到一定閾值時就強制釋放GIL,另外就是在線程遇到阻塞.join()方法時釋放GIL.

CPython解釋器設置GIL的主要原因是爲了保證不讓多個線程同時執行同一條字節碼,這就避免了可能多個線程同時對某個對象進行操作,還有當年還是單核操作系統,這樣的設計不會有任何問題.而現在多核操作系統時代反而會有些雞肋;那麼該如何解決這個問題呢?1.更換更快的解釋器,比如Jpython解釋器(java實現的python解釋器);2.使用多進程來完成多任務的處理(這個也是專家的建議).

python解釋器分類:

  • CPython解釋器 就是用 C 語言開發的了,是官方標準實現,擁有良好的生態

  • IPython 是在 CPython 的基礎之上在交互式方面得到增強的解釋器

  • Jython 是專爲 Java 平臺設計的 Python 解釋器,它把 Python 代碼編譯成 Java 字節碼執行

  • PyPy 是 Python 語言的的一種快速、兼容的替代實現,以速度塊著稱.

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章