python程序執行緒優缺點 Python學習筆記

2021-10-11 22:05:25 字數 2016 閱讀 2859

# 這是學習廖雪峰老師python教程的學習筆記

1、概覽

我們介紹了多程序和多執行緒,這是實現多工最常用的兩種方式。現在,我們來討論一下這兩種方式的優缺點

要實現多工,通常我們會設計master-worker模式,master負責分配任務,worker負責執行任務,因此,多工環境下,通常是乙個master,多個worker。如果用多程序實現master-worker,主程序就是master,其他程序就是worker。

如果用多執行緒實現master-worker,主線程就是master,其他執行緒就是worker。

1.1、多程序模式的優缺點

1)優點

穩定性高,因為乙個子程序崩潰了,不會影響主程序和其他子程序。(當然主程序掛了所有程序就全掛了,但是master程序只負責分配任務,掛掉的概率低)

2)缺點

建立程序的代價大,在unix/linux系統下,用fork呼叫還行,在windows下建立程序開銷巨大。另外,作業系統能同時執行的程序數也是有限的,在記憶體和cpu的限制下,如果有幾千個程序同時執行,作業系統連排程都會成問題。

1.2、多執行緒模式的優缺點

1)優點

多執行緒模式通常比多程序快一點(只有一點點)。在windows下,多執行緒的效率比多程序要高,所以微軟的iis伺服器預設採用多執行緒模式。

2)缺點

致命的缺點就是任何乙個執行緒掛掉都可能直接造成整個程序崩潰,因為所有執行緒共享程序的記憶體。由於多執行緒存在穩定性的問題,iis的穩定性就不如apache。

2、程序切換和執行緒切換

切換核心棧和硬體上下文。

執行緒上下文切換和程序上下文切換乙個最主要的區別是執行緒的切換虛擬記憶體空間依然是相同的,但是程序切換是不同的。這兩種上下文切換的處理都是通過作業系統核心來完成的。核心的這種切換過程伴隨的最顯著的效能損耗是將暫存器中的內容切換出。

而無論程序/執行緒切換都要涉及到:儲存當前執行的現場環境(cpu暫存器狀態、記憶體頁等)

把新任務的執行環境準備好(恢復上次的暫存器狀態,切換記憶體頁等)

這個切換過程雖然很快,但是也需要耗費時間。如果有幾千個任務同時進行,作業系統可能就主要忙著切換任務,根本沒有多少時間去執行任務了。所以,多工一旦多到乙個限度,就會消耗掉系統所有的資源,結果效率急劇下降,所有任務都做不好。

3、計算密集型vs. io密集型

是否採用多工的第二個考慮是任務的型別。我們可以把任務分為計算密集型和io密集型。

3.1、計算密集型

計算密集型任務由於主要消耗cpu資源,因此,**執行效率至關重要。python這樣的指令碼語言執行效率很低,完全不適合計算密集型任務。對於計算密集型任務,最好用c語言編寫。

3.2、io密集型

涉及到網路、磁碟io的任務都是io密集型任務,這類任務的特點是cpu消耗很少,任務的大部分時間都在等待io操作完成(因為io的速度遠遠低於cpu和記憶體的速度)。對於io密集型任務,任務越多,cpu效率越高,但也有乙個限度。常見的大部分任務都是io密集型任務,比如web應用。

io密集型任務執行期間,99%的時間都花在io上,花在cpu上的時間很少,因此,用執行速度極快的c語言替換用python這樣執行速度極低的指令碼語言,完全無法提公升執行效率。對於io密集型任務,最合適的語言就是開發效率最高(**量最少)的語言,指令碼語言是首選,c語言最差。

4、非同步io

考慮到cpu和io之間巨大的速度差異,乙個任務在執行的過程中大部分時間都在等待io操作,單程序單執行緒模型會導致別的任務無法並行執行,因此,我們才需要多程序模型或者多執行緒模型來支援多工併發執行。

現代作業系統對io操作已經做了巨大的改進,最大的特點就是支援非同步io。如果充分利用作業系統提供的非同步io支援,就可以用單程序單執行緒模型來執行多工,這種全新的模型稱為事件驅動模型,nginx就是支援非同步io的web伺服器,它在單核cpu上採用單程序模型就可以高效地支援多工。在多核cpu上,可以執行多個程序(數量與cpu核心數相同),充分利用多核cpu。由於系統總的程序數量十分有限,因此作業系統排程非常高效。用非同步io程式設計模型來實現多工是乙個主要的趨勢。

對應到python語言,單執行緒的非同步程式設計模型稱為協程,有了協程的支援,就可以基於事件驅動編寫高效的多工程式。

Python筆記 程序和執行緒的優缺點

我們介紹了多程序和多執行緒,這是實現多工最常用的兩種方式。現在,我們來討論一下這兩種方式的優缺點。首先,要實現多工,通常我們會設計master worker模式,master負責分配任務,worker負責執行任務,因此,多工環境下,通常是乙個master,多個worker。如果用多程序實現maste...

程序 執行緒 多程序 多執行緒的優缺點

ibm有個傢伙做了個測試,發現切換執行緒context的時候,windows比linux快一倍多。進出最快的鎖 windows2k的 critical section和linux的pthread mutex windows比linux的要快五倍左右。當然這並不是說linux不好,而且在經過實際程式設...

多程序與多執行緒區別 優缺點(Python)

在linux系統下,使用os.fork 呼叫一次,返回兩次,作業系統自動把當前程序 父程序 複製了乙份 子程序 然後分別在父程序和子程序內返回。子程序永遠返回0,父程序返回子程序的id。經過這樣做,父程序就能fork出很多子程序,並可以記錄下子程序的id號了,子程序可以通過getppid 來獲取父程...