導航:首頁 > 編程語言 > windows多核編程

windows多核編程

發布時間:2024-05-21 18:28:20

『壹』 python如何利用多核處理器

GIL 與 Python 線程的糾葛

GIL 是什麼東西?它對我們的 python 程序會產生什麼樣的影響?我們先來看一個問題。運行下面這段 python 程序,CPU 佔用率是多少?

# 請勿在工作中模仿,危險:)def dead_loop(): while True: passdead_loop()

答案是什麼呢,佔用 100% CPU?那是單核!還得是沒有超線程的古董 CPU。在我的雙核 CPU 上,這個死循環只會吃掉我一個核的工作負荷,也就是只佔用 50% CPU。那如何能讓它在雙核機器上佔用 100% 的 CPU 呢?答案很容易想到,用兩個線程就行了,線程不正是並發分享 CPU 運算資源的嗎。可惜答案雖然對了,但做起來可沒那麼簡單。下面的程序在主線程之外又起了一個死循環的線程

import threadingdef dead_loop(): while True: pass# 新起一個死循環線程t = threading.Thread(target=dead_loop)t.start()# 主線程也進入死循環dead_loop()t.join()

按道理它應該能做到佔用兩個核的 CPU 資源,可是實際運行情況卻是沒有什麼改變,還是只佔了 50% CPU 不到。這又是為什麼呢?難道 python 線程不是操作系統的原生線程?打開 system monitor 一探究竟,這個佔了 50% 的 python 進程確實是有兩個線程在跑。那這兩個死循環的線程為何不能占滿雙核 CPU 資源呢?其實幕後的黑手就是 GIL。

GIL 的迷思:痛並快樂著

GIL 的全稱為Global Interpreter Lock,意即全局解釋器鎖。在 Python 語言的主流實現 CPython 中,GIL 是一個貨真價實的全局線程鎖,在解釋器解釋執行任何 Python 代碼時,都需要先獲得這把鎖才行,在遇到 I/O 操作時會釋放這把鎖。如果是純計算的程序,沒有 I/O 操作,解釋器會每隔 100 次操作就釋放這把鎖,讓別的線程有機會執行(這個次數可以通過sys.setcheckinterval來調整)。所以雖然 CPython 的線程庫直接封裝操作系統的原生線程,但 CPython 進程做為一個整體,同一時間只會有一個獲得了 GIL 的線程在跑,其它的線程都處於等待狀態等著 GIL 的釋放。這也就解釋了我們上面的實驗結果:雖然有兩個死循環的線程,而且有兩個物理 CPU 內核,但因為 GIL 的限制,兩個線程只是做著分時切換,總的 CPU 佔用率還略低於 50%。

看起來 python 很不給力啊。GIL 直接導致 CPython 不能利用物理多核的性能加速運算。那為什麼會有這樣的設計呢?我猜想應該還是歷史遺留問題。多核 CPU 在 1990 年代還屬於類科幻,Guido van Rossum 在創造 python 的時候,也想不到他的語言有一天會被用到很可能 1000+ 個核的 CPU 上面,一個全局鎖搞定多線程安全在那個時代應該是最簡單經濟的設計了。簡單而又能滿足需求,那就是合適的設計(對設計來說,應該只有合適與否,而沒有好與不好)。怪只怪硬體的發展實在太快了,摩爾定律給軟體業的紅利這么快就要到頭了。短短 20 年不到,代碼工人就不能指望僅僅靠升級 CPU 就能讓老軟體跑的更快了。在多核時代,編程的免費午餐沒有了。如果程序不能用並發擠干每個核的運算性能,那就意謂著會被淘汰。對軟體如此,對語言也是一樣。那 Python 的對策呢?

Python 的應對很簡單,以不變應萬變。在最新的 python 3 中依然有 GIL。之所以不去掉,原因嘛,不外以下幾點:

閱讀全文

與windows多核編程相關的資料

熱點內容
壓縮干糧圖片 瀏覽:836
怎麼看網站被加密的視頻 瀏覽:846
哪個app可以弄會動的照片模板 瀏覽:272
如何關閉電腦的時鍾源伺服器 瀏覽:902
adb命令設置主屏幕應用 瀏覽:990
編譯後的bak文件 瀏覽:259
php生成文件名 瀏覽:880
日照智能車輛移動機器人導航演算法 瀏覽:115
解壓力的食療 瀏覽:125
密鑰如何加密隨機數 瀏覽:381
統計學中pre的演算法 瀏覽:411
inline函數在編譯時不做類型檢查 瀏覽:268
經緯度查詢android 瀏覽:762
vivoz5x方舟怎麼進伺服器 瀏覽:498
vivox50安卓微信人臉支付怎麼開啟 瀏覽:895
cmd退出python命令 瀏覽:533
恢復u盤加密隱藏的文件 瀏覽:923
對某個人加密應該用公鑰 瀏覽:1000
機頂盒中央1加密 瀏覽:98
單片機的出現有什麼影響 瀏覽:231