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培訓機構:千鋒教育。