pythonGIL的原理
python中GIL的原理
1、說明
GIL規定一個Python解釋程序只能同時由一個線程控制。
在CPU限制類型和多線程代碼中,GIL是一個性能瓶頸。
GIL使Python多線程成為偽并行多線程。
僅CPython解釋器上存在GIL。
2、原理
(1)線程1、2、3輪流執行,每一個線程在執行是,都會鎖住GIL,以阻止別的線程執行;
同樣的,每一個線程執行一段后,會釋放GIL,以允許別的線程開始利用資源。
(2)由于古老GIL機制,如果線程2需要在CPU2上執行,它需要先等待在CPU1上執行的線程1釋放GIL(記住:GIL是全局的)
(3)如果線程1是因為i/o阻塞讓出的GIL,那么線程2必定拿到GIL。但如果線程1是因為timerticks計數滿100ticks(大概對應了1000個bytecodes)讓出GIL,那么這個時候線程1和線程2公平競爭。
(4)但要命的是,在Python2.x,線程1不會動態的調整自身的優先級,所以很大概率下次被選中執行的還是線程1,在很多個這樣的選舉周期內,線程2只能安靜的看著線程1拿著GIL在CPU1上歡快的執行。
(5)極端一點的情況下,比如線程1使用了whileTrue在CPU1上執行,那就真是“一核有難,八核圍觀”了。
以上就是python中GIL的原理介紹,希望能對大家有所幫助。如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。

相關推薦HOT
更多>>
pythonfor循環是什么
pythonfor循環是什么在做遍歷的時候,對于一些數據的反復循環執行,我們會用到for循環的語句。可以說這是新手入門必學的語句之一,在很多基礎循...詳情>>
2023-11-13 07:46:36
pythoncontextmanager()的轉換
python中contextmanager()的轉換1、說明當發出請求時,requests庫會在將請求實際發送到目標服務器之前準備該請求。請求準備包括像驗證頭信息和...詳情>>
2023-11-13 06:34:35
python使用items()遍歷鍵值對
python使用items()遍歷鍵值對字典可以用來存儲各種方式的信息,所以有很多方式可以通過字典的所有鍵值對、鍵或值。說明1、即使通過字典,鍵值對...詳情>>
2023-11-13 04:24:15
python實例方法中self的作用
python實例方法中self的作用說明1、無論是創建類的構造方法還是實例方法,最少要包含一個參數self。2、通過實例的self參數與對象進行綁定,程序...詳情>>
2023-11-13 03:46:48