1. 程式人生 > >關於Python 多執行緒為何適合IO密集型任務

關於Python 多執行緒為何適合IO密集型任務

io密集型任務,一般情況下,io有傳送資料(output)和返回資料(input)兩個過程。就是傳送訊息,等待返回訊息。python多執行緒在處理io的時候,一個執行緒獲得GIL傳送訊息,然後等待返回訊息(阻塞),python此時釋放GIL, 其他執行緒得到GIL傳送訊息,然後同樣等待返回訊息(阻塞)......,這樣保證了IO傳輸過程時間的合理利用,提高io傳輸效率。

關於GIL的工作方式:https://blog.csdn.net/zshluckydogs/article/details/81986649

由於python在用cpu執行計算任務的時候,GIL鎖不會被釋放,python多執行緒其實還是使用的單核在進行cpu計算。一個cpu時間片只會分給一個執行緒,因此,cpu密集型的情況下,多執行緒並不會加快計算速度。

 

但是多核下,多核多執行緒比單核單執行緒更差,原因是單核下多執行緒,每次釋放GIL喚醒的那個執行緒都能獲得GIL鎖,能夠無縫執行,但多核下,CPU釋放GIL後,其他CPU上的執行緒都會進行競爭,但GIL可能被CPU0拿到,導致其他幾個CPU上被喚醒的執行緒會醒著等待到切換時間後又進入待排程狀態,這樣會造成執行緒顛簸,導致效率更低。

關於現車顛簸:https://blog.csdn.net/pianistOfSoftware/article/details/51939736

所以多執行緒適合單核IO密集型任務。