python中的多執行緒

2021-09-11 06:36:00 字數 1143 閱讀 8098

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 來控制,正是這...