一 併發簡介

2022-06-27 17:15:12 字數 1013 閱讀 6150

1.1併發簡史

早期的馮丶諾依曼型計算機的主要特點是:1.數字計算機的數制採用二進位制;2.計算機應該按照程式順序執行。之後伴隨著作業系統的誕生,使得計算機每次可以執行多個程式,每個程式執行在單獨的程序中。早期的分時系統中,每乙個程序相當於一台虛擬的馮丶諾依曼型計算機。程序是作業系統分配資源的最小單位。

在計算機中加入作業系統實現多個程式同時執行的原因:1.資源利用率:在乙個程式的等待時間,執行另乙個程式;2.公平性:不同的程式對於計算機上的資源有同等的使用權;3.便利性:比如,在計算多個任務的時候,編寫多個程式,之間相互通訊,往往要比編寫乙個單獨的程式實現起來要簡單很多。

這些因素同樣促使了執行緒的出現,執行緒會共享程序的資源,乙個程序可以有多個執行緒,執行緒是cpu排程的基本單位。

1.2執行緒的優勢

a.發揮多處理器的強大能力:多執行緒程式可以同時在多個處理器上執行,提高處理器資源的利用率來提公升系統的吞吐率。比如,如果程式只有乙個執行緒,那麼最多只能在乙個處理器上執行,在雙處理器系統上,單執行緒的程式只能使用一半的cpu資源,而在擁有100個處理器的系統上,將有99%的資源無法使用。

b.建模的簡單性:包含多種不同型別任務的程式往往比單個型別任務的程式要難以編寫,多執行緒可以將每種型別的任務都分配乙個專門的執行緒。

c.非同步事件的簡化處理:在單執行緒的io操作中,如果讀操作阻塞,不僅意味處理請求的過程將停頓,而且對其他所有的請求處理都將停頓,所有單執行緒有nio。但是如果我們為每個請求分配乙個執行緒,那麼某個請求的阻塞將不會影響到其他的執行緒。

d.響應更靈敏的使用者介面

1.3執行緒的風險

a.安全性問題(結果是不是我們想要的正確結果)

在沒有充足同步的情況下,多個執行緒中的操作執行順序是不可**(可能有指令重排序)。這是一種常見的併發安全問題,稱為競態條件:執行結果取決於執行時對執行緒中操作的交替執行方式。

b.活躍性問題(執行緒能不能執行下去)

當某個操作無法執行下去時,就會發生活躍性問題。例如:執行緒a一直等待執行緒b釋放其持有的資源,而執行緒b一直不釋放資源,那麼a將永久地等待下去。

c.效能問題(執行時間長不長)

十一 併發程式設計

子go程 func sing i int 子go程 func dance i int 主go程 func main 主go程結束,子go程隨之退出。所以這裡要睡10秒等子go程執行完畢,不然看不見子go程列印輸出。time.sleep 10 time.second 1.1runtime包 len c...

C 併發實戰 (一)併發基本概念

併發,最簡單的理解就是,兩個或者以上的活動同時進行。舉個比較實際的例子,你可以手腳並用,兩隻手做不同的動作等等。在計算機中的 併發 是指乙個系統可以同時執行多個獨立的活動。在以前大多數計算機都只有乙個處理單元 或者核心 這種計算機在同一時刻只能執行乙個任務,任務只能乙個乙個的執行,但是這樣的計算機可...

併發程式設計的藝術(一) 併發程式設計的挑戰

含義 cpu通過給每個執行緒分配cpu時間片實現多執行緒執行 當前任務執行乙個時間片後會切換下乙個任務,但切換前會儲存上乙個任務的狀態,從儲存到載入的過程就是一次上下文切換。但執行緒會有建立和上下文切換的開銷,所以多執行緒不一定快。減少上下文切換方法 無鎖併發程式設計 如id按hash演算法取模,不...