多執行緒的基本概念

2022-04-01 15:11:13 字數 1705 閱讀 2458

本文最新版本已遷移至:

多執行緒程式設計必須理解的一些基本概念,適用於所有程式語言。內容:

並髮式程式設計
多工作業系統
多執行緒vs多程序
執行緒安全
執行緒的生命週期
執行緒的型別
不同的程式設計正規化對軟體有不同的視角。並髮式程式設計將軟體看做任務和資源的組合——任務之間競爭和共享資源,當資源滿足時執行任務,否則等待資源。
並髮式程式設計使得軟體易於理解和重用,在某些場景能夠極大提高效能。
要實現併發,首先需要作業系統的支援。現在的作業系統大部分都是多工作業系統,可以「同時」執行多個任務。
多工可以在程序或執行緒的層面執行。
程序是指乙個記憶體中執行的應用程式,每個程序都有自己獨立的一塊記憶體空間。多工作業系統可以「併發」執行這些程序。
執行緒是指程序中亂序、多次執行的**塊,多個執行緒可以「同時」執行,所以認為多個執行緒是「併發」的。多執行緒的目的是為了最大限度的利用cpu資源。比如乙個jvm程序中,所有的程式**都以執行緒的方式執行。
這裡面的「同時」、「併發」只是一種巨集觀上的感受,實際上從微觀層面看只是程序/執行緒的輪換執行,只不過切換的時間非常短,所以產生了「並行」的感覺。
作業系統會為每個程序分配不同的記憶體塊,而多個執行緒共享程序的記憶體塊。這帶來最直接的不同就是建立執行緒的開銷遠小於建立程序的開銷。
同時,由於記憶體塊不同,所以程序之間的通訊相對困難。需要採用pipe/named pipe,signal, message queue, shared memory,socket等手段;而執行緒間的通訊簡單快速,就是共享程序內的全域性變數。
但是,程序的排程由作業系統負責,執行緒的排程就需要我們自己來考慮,避免死鎖,飢餓,活鎖,資源枯竭等情況的發生,這會增加一定的複雜度。而且,由於執行緒之間共享記憶體,我們還需要考慮執行緒安全性的問題。
以為執行緒間共享程序中的全域性變數,所以當其他執行緒改變了共享的變數時,可能會對本執行緒產生影響。所謂執行緒安全的約束是指乙個函式被多個併發執行緒反覆呼叫時,要一直產生正確的結果。要保證執行緒安全,主要是通過加鎖的方式保證共享變數的正確訪問。
比執行緒安全更嚴格的約束是"可重入性",即函式在乙個執行緒內執行的過程中被暫停,接下來又在另乙個執行緒內被呼叫,之後在返回原執行緒繼續執行。在整個過程中都能保證正確執行。保證可重入性,通常通過製作全域性變數的本地拷貝來實現。
所謂的xx生命週期,其實就是某物件的包含產生和銷毀的一張狀態圖。執行緒的生命週期如下圖所示:

各狀態的說明如下:
new新建。新建立的執行緒經過初始化後,進入runnable狀態。

runnable就緒。等待執行緒排程。排程後進入執行狀態。

running執行。

blocked阻塞。暫停執行,解除阻塞後進入runnable狀態重新等待排程。

dead消亡。執行緒方法執行完畢返回或者異常終止。

可能有3種情況從running進入blocked:
本文介紹關於多執行緒的基本概念,接下來會用例項講解python的多執行緒程式設計。  

多執行緒基本概念

什麼是程式 為了完成某項特定的任務,使用某種語言,編寫一組指令的集合 什麼是程序 是乙個正在進行的程式 什麼是執行緒 在乙個程序中,執行的一套功能流程,稱為執行緒 在乙個程序中,執行的多套功能流程,稱為多執行緒 多執行緒程式的優點 1 降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成...

多執行緒 基本概念

多執行緒和高併發是身為開發人員高階中一直是繞不開的話題,為此專門學習了下,做下總結,作為自己的備忘錄。1.什麼是執行緒 執行緒是作業系統中能夠進行運算排程的最小單位,是程序中的實際運作單位。執行緒本身有乙個供程式執行時的堆疊,同類的多個 執行緒共享一塊記憶體空間。乙個執行緒的生存週期 新建狀態 就緒...

多執行緒基本概念

執行緒同步的真實意思和字面意思恰好相反。執行緒同步的真實意思,其實是 排隊 幾個執行緒之間要排隊,乙個乙個對共享資源進行操作,而不是同時進行操作。因此,關於執行緒同步,需要牢牢記住的第一點是 執行緒同步就是執行緒排隊。同步就是排隊。執行緒同步的目的就是避免執行緒 同步 執行。這可真是個無聊的繞口令。...