Python中的多線程沒有真正實現多現程! 爲何這麼說,咱們瞭解一個概念,全局解釋器鎖(GIL)。python
Python代碼的執行由Python虛擬機(解釋器)來控制。多線程
Python在設計之初就考慮要在主循環中,同時只有一個線程在執行,spa
就像單CPU的系統中運行多個進程那樣,內存中能夠存放多個程序,線程
但任意時刻,只有一個程序在CPU中運行。設計
一樣地,雖然Python解釋器能夠運行多個線程,只有一個線程在解釋器中運行。進程
對Python虛擬機的訪問由全局解釋器鎖(GIL)來控制,正是這個鎖能保證同時只有一個線程在運行。在多線程環境中,Python虛擬機按照如下方式執行。內存
1.設置GIL。虛擬機
2.切換到一個線程去執行。循環
3.運行。程序
4.把線程設置爲睡眠狀態。
5.解鎖GIL。
6.再次重複以上步驟。
python 每執行100個字節碼,GIL鎖就會解鎖一次,讓其它線程執行,因此,python多線程環境,是交替執行,上下文切換,並無同一時刻執行代碼.