python中的多執行緒是假的多執行緒!
為什麼這麼說,我們先明確乙個概念,全域性直譯器鎖(gil)global interpreter lock
python**的執行由python虛擬機器(直譯器)來控制,同時只有乙個執行緒在執行
對python虛擬機器的訪問由全域性直譯器鎖(gil)來控制,
正是這個鎖能保證同時只有乙個執行緒在執行。
在多執行緒環境中,python虛擬機器按照以下方式執行。
1.設定gil。
2.切換到乙個執行緒去執行。
3.執行。
4.把執行緒設定為睡眠狀態。
5.解鎖gil。
6.再次重複以上步驟。
比方我有乙個4核的cpu,那麼這樣一來,在單位時間內每個核只能跑乙個執行緒,然後時間片輪轉切換。
但是python不一樣,它不管你有幾個核,單位時間多個核只能跑乙個執行緒,然後時間片輪轉。
執行一段時間後讓出,多執行緒在python中只能交替執,100核只能用到1個核
例如,下面的**4核cpu只會用乙個核,大概占用25%的cpu使用率。
from threading import thread
defloop()
:while
true
:print
("親愛的,我錯了,我能吃飯了嗎?"
)if __name__ ==
'__main__'
:for i in
range(3
):t = thread(target=loop)
t.start(
)
而如果我們變成程序呢?cpu --100%
from multiprocessing import process
defloop()
:while
true
:print
("親愛的,我錯了,我能吃飯了嗎?"
)if __name__ ==
'__main__'
:for i in
range(3
):t = process(target=loop)
t.start(
)
3, 繞開多執行緒, 用程序加多協程. python中多執行緒 Python之多執行緒
python之多執行緒 一 概念 1 多工可以由多程序完成,也可以由乙個程序內的多執行緒完成。程序是由若干的執行緒組成,乙個程序至少有乙個程序。執行緒是作業系統直接支援的執行單元,天賜高階預壓通常都是內建多執行緒的支援,python的執行緒是真正的posix thread而不是模擬出來的執行緒。2 ...
python中的多執行緒
當python程式執行時會預設建立乙個主線程,除了主線程之外我們還可以建立別的執行緒,可以使用threading引入 import threading import time defthinking for i in range 3 threading.current thread 檢視當前正在執行...
python中的多執行緒是假的多執行緒
python中的多執行緒是假的多執行緒?為什麼這麼說,我們先明確乙個概念,全域性直譯器鎖 gil global interpreter lock python 的執行由python虛擬機器 直譯器 來控制,同時只有乙個執行緒在執行 對python虛擬機器的訪問由全域性直譯器鎖 gil 來控制,正是這...