GIL用C語言解決
阿新 • • 發佈:2018-12-12
執行一個單執行緒死迴圈程式,單核cpu佔用直接100%
while True: pass
執行一個雙執行緒的死迴圈程式,cpu同樣佔用100%
import threading #子執行緒死迴圈 def test(): while True: pass t1=threading.Thread(target=test) t1.start() #主執行緒死迴圈 while True: pass
我們把cpu換成雙核之後再次執行雙執行緒死迴圈程式,發現每個cpu各佔50%,兩個加起來才是100%
我們在執行雙程序死迴圈程式,發現兩個cpu佔用都達到了100%
import multiprocessing def deadLoop(): while True: pass #子程序死迴圈 p1=multiprocessing.Process(target=deadLoop) p1.start() #主程序死迴圈 deadLoop()
得出一個結論,python執行多工,執行緒沒有程序高,因為有GIL鎖,同一時刻只有一個執行緒會被呼叫,單核沒有區別,多核有明顯區別
c語言的應用
test.c檔案,程式碼如下
gcc test.c在當前目錄生成一個a.out檔案,./a.out在當前目錄執行a.out檔案,打印出c程式碼的結果
新建一個檔案寫如下程式碼,相當於python的while True:pass,分號相當於python中的pass,檔案以.c結尾,我這裡命名為loop.c
把c語言檔案編譯成一個動態庫的命令(linux平臺下)
gcc xxx.c -shared -o libxxxx.so
gcc loop.c -shared -o libdeadloop.so
在當前目錄生成一個libdeadloop.so檔案
main.py,在載入動態庫裡填寫剛才libdeadloop.so檔案的路徑
執行main檔案,成功多執行緒佔用多個cpu100%