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