Python基礎(十三) 爲何說python多線程沒有真正實現多現程

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多線程環境,是交替執行,上下文切換,並無同一時刻執行代碼.

相關文章
相關標籤/搜索