Go 特性1 併發程式設計技術

2021-10-12 12:14:00 字數 1581 閱讀 6593

指在同一時刻,有多條指令在多個處理器上同時執行。

指在同一時刻只能有一條指令執行,但多個程序指令被快速的輪換執行,使得在巨集觀上具有多個程序同時執行的效果,但在微觀上並不是同時執行的,只是把時間分成若干段,通過cpu時間片輪轉使多個程序快速交替的執行。

程序基本的狀態有5種,分別為初始態,就緒態,執行態,掛起態與終止態。

存在問題:

系統開銷比較大,占用資源比較多,開啟程序數量比較少。

在unix/linux系統下,還會產生「孤兒程序」和「殭屍程序」。

在作業系統中,可以產生很多的程序。在unix/linux系統中,正常情況下,子程序是通過父程序fork建立的,子程序再建立新的程序。

並且父程序永遠無法**子程序 到底什麼時候結束。 當乙個 程序完成它的工作終止之後,它的父程序需要呼叫系統呼叫取得子程序的終止狀態。

什麼是執行緒?

lwp:light weight process 輕量級的程序,本質仍是程序 (linux下)。

執行緒同步

執行緒同步,指乙個執行緒發出某一功能呼叫時,在沒有得到結果之前,該呼叫不返回。同時其它執行緒為保證資料一致性,不能呼叫該功能。

「同步」的目的,是為了避免資料混亂,解決與時間有關的錯誤。實際上,不僅執行緒間需要同步,程序間、訊號間等等都需要同步機制。

所有「多個控制流,共同操作乙個共享資源」的情況,都需要同步。

linux中提供一把互斥鎖mutex(也稱之為互斥量)。

每個執行緒在對資源操作前都嘗試先加鎖,成功加鎖才能操作,操作結束解鎖。同一時刻,只能有乙個執行緒持有該鎖。

互斥鎖實質上是作業系統提供的一把「建議鎖」(又稱「協同鎖」),建議程式中有多執行緒訪問共享資源的時候使用該機制。但,並沒有強制限定。因此,即使有了mutex,如果有執行緒不按規則來訪問資料,依然會造成資料混亂。

與互斥量類似,但讀寫鎖允許更高的並行性。其特性為:寫獨佔,讀共享。

讀寫鎖特性:

讀寫鎖是「寫模式加鎖」時, 解鎖前,所有對該鎖加鎖的執行緒都會被阻塞。

讀寫鎖是「讀模式加鎖」時, 如果執行緒以讀模式對其加鎖會成功;如果執行緒以寫模式加鎖會阻塞。

讀寫鎖是「讀模式加鎖」時, 既有試圖以寫模式加鎖的執行緒,也有試圖以讀模式加鎖的執行緒。那麼讀寫鎖會阻塞隨後的讀模式鎖請求。優先滿足寫模式鎖。讀鎖、寫鎖並行阻塞,寫鎖優先順序高。

讀寫鎖也叫共享-獨佔鎖。當讀寫鎖以讀模式鎖住時,它是以共享模式鎖住的;當它以寫模式鎖住時,它是以獨佔模式鎖住的。寫獨佔、讀共享。

讀寫鎖非常適合於對資料結構讀的次數遠大於寫的情況。

協程:coroutine。也叫輕量級執行緒。

與傳統的系統級執行緒和程序相比,協程最大的優勢在於「輕量級」。可以輕鬆建立上萬個而不會導致系統資源衰竭。而執行緒和程序通常很難超過1萬個。這也是協程別稱「輕量級執行緒」的原因。

乙個執行緒中可以有任意多個協程,但某一時刻只能有乙個協程在執行,多個協程分享該執行緒分配到的計算機資源。

除了python、lua、ruset,go等,多數語言在語法層面並不直接支援協程。

在協程中,呼叫乙個任務就像呼叫乙個函式一樣,消耗的系統資源最少!但能達到程序、執行緒併發相同的效果。

從系統資源消耗的角度出發來看,程序相當多,執行緒次之,協程最少。

併發程式設計技術 Python高階

併發任務處理,即同時執行多個任務,可以採用如下幾種方案實現 1.多程序,即建立多個程序,每個程序 其實是程序中的主線程 負責執行乙個任務,由於多個程序可以同時執行,所以就可以實現併發任務處理 2,多執行緒 即建立多個執行緒,每個執行緒負責執行乙個任務,由於多個執行緒可以同時執行,所以就可以實現併發任...

go 併發程式設計 1

優雅的併發程式設計正規化,完善的併發支援,出色的併發效能是go語言區別於其他語言的一大特色.1.併發基礎 win和linux 出現之前,程式設計師並沒有併發的概念.因為命令式程式語言是以序列為基礎的,程式會順序執行每條指令,整個過程只有乙個上下文,即乙個呼叫棧,乙個堆.併發則意味著程式在執行時有多個...

Nios Flash程式設計技術

1.1 altera支援cfi flash程式設計 1.3 非支援cfi程式設計 由於我所用的nor flash晶元是am29lv320db,不再nios支援的列表,自己編輯了override檔案,但還是無法正確program進去,決定用列表支援的sst39vf800試一試,引腳相容,容量為1 4,...