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