關於 Python 多執行緒/多程式
src:http://m.blog.csdn.net/article/details?id=51243137
Python 下有一個GIL,用來保證每次直譯器只在解釋一個檔案。所以,在單核CPU下的多執行緒其實都只是併發,不是並行,併發和並行從巨集觀上來講都是同時處理多路請求的概念。但併發和並行又有區別,並行是指兩個或者多個事件在同一時刻發生;而併發是指兩個或多個事件在同一時間間隔內發生。
但是在處理 IO 密集型的時候,用多執行緒可以提高程式執行的效率。
如果是 CPU 密集型的程式,還是要使用多程式。
試試用Python寫個死迴圈:
import threading, multiprocessing
def loop():
x = 0
while True:
x = x ^ 1
for i in range(multiprocessing.cpu_count()):
t = threading.Thread(target=loop)
t.start()
啟動與CPU核心數量相同的N個執行緒,在4核CPU上可以監控到CPU佔用率僅有160%,也就是使用不到兩核。
即使啟動100個執行緒,使用率也就170%左右,仍然不到兩核。
但是用C、C++或Java來改寫相同的死迴圈,直接可以把全部核心跑滿,4核就跑到400%,8核就跑到800%,為什麼Python不行呢?
因為Python的執行緒雖然是真正的執行緒,但直譯器執行程式碼時,有一個GIL鎖:Global Interpreter Lock,任何Python執行緒執行前,必須先獲得GIL鎖,然後,每執行100條位元組碼,直譯器就自動釋放GIL鎖,讓別的執行緒有機會執行。這個GIL全域性鎖實際上把所有執行緒的執行程式碼都給上了鎖,所以,多執行緒在Python中只能交替執行,即使100個執行緒跑在100核CPU上,也只能用到1個核。
GIL是Python直譯器設計的歷史遺留問題,通常我們用的直譯器是官方實現的CPython,要真正利用多核,除非重寫一個不帶GIL的直譯器。
所以,在Python中,可以使用多執行緒,但不要指望能有效利用多核。如果一定要通過多執行緒利用多核,那隻能通過C擴充套件來實現,不過這樣就失去了Python簡單易用的特點。
不過,也不用過於擔心,Python雖然不能利用多執行緒實現多核任務,但可以通過多程式實現多核任務。多個Python程式有各自獨立的GIL鎖,互不影響。
相關文章
- Python 多執行緒多程式Python執行緒
- 入門python多執行緒/多程式Python執行緒
- Python的多程式和多執行緒Python執行緒
- Python——程式、執行緒、協程、多程式、多執行緒(個人向)Python執行緒
- Python 多執行緒及程式Python執行緒
- python多執行緒中:如何關閉執行緒?Python執行緒
- [譯] Python 的多執行緒與多程式Python執行緒
- python 多程式和多執行緒學習Python執行緒
- python多程式取代多執行緒的探究Python執行緒
- 多執行緒,多程式執行緒
- python 多執行緒程式設計Python執行緒程式設計
- Python多執行緒程式設計Python執行緒程式設計
- 執行緒以及多執行緒,多程式的選擇執行緒
- python爬蟲入門八:多程式/多執行緒Python爬蟲執行緒
- Python中的多工:多執行緒Python執行緒
- 多執行緒和多執行緒同步執行緒
- pytest(13)-多執行緒、多程式執行用例執行緒
- Android中的多程式、多執行緒Android執行緒
- 多執行緒相關整理執行緒
- java 多執行緒(關於Thread的講解)Java執行緒thread
- python3 多執行緒Python執行緒
- 04.python-多執行緒Python執行緒
- python--多工執行緒Python執行緒
- python多執行緒基礎Python執行緒
- python有多執行緒嗎Python執行緒
- python進階(15)多執行緒與多程式效率測試Python執行緒
- pytest多程式/多執行緒執行測試用例執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 什麼是多執行緒?Python多執行緒有什麼優勢?執行緒Python
- python爬蟲之多執行緒、多程式+程式碼示例Python爬蟲執行緒
- 多執行緒程式設計相關理論執行緒程式設計
- 多執行緒系列(1),多執行緒基礎執行緒
- Python 多執行緒無用?深入總結 二(深入瞭解GIL 執行緒守護 執行緒程式CPU關係)Python執行緒
- 關於多執行緒的兩種實現方式執行緒
- 多執行緒--執行緒管理執行緒
- 執行緒與多執行緒執行緒
- 多執行緒【執行緒池】執行緒
- 多執行緒相關問題執行緒
- 豬行天下之Python基礎——9.1 Python多執行緒與多程式(上)Python執行緒