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