高效併發高階

2022-05-28 08:21:15 字數 914 閱讀 6756

多執行緒執行記憶體模型和特點

為什麼會出現亂序?

取指 if

解碼和取暫存器運算元 id

執行或者有效位址計算 ex

儲存器訪問 mem

寫回 wb

硬體優化(如寫吸收,批操作)

程式順序原則:乙個執行緒內保證語義的序列性,在**層面上是按照順序執行的

volatile規則:volatile變數的寫,先發生於讀,這保證了volatile變數的可見性

鎖規則:解鎖(unlock)必然發生在隨後的加鎖(lock)前

傳遞性:a先於b,b先於c,那麼a必然先於c

執行緒的start()方法先於它的每乙個動作

執行緒的所有操作先於執行緒的終結(thread.join())

執行緒的中斷(interrupt())先於被中斷執行緒的**

物件的建構函式執行結束先於finalize()方法

第一是保證了此變數對所有執行緒的可見性,這裡的可見性是指當一條執行緒修改了這個變數的值,新值對於其他執行緒來說是立即知道的,而普通變數不能做到這一點,如果使用volatile變數來控制併發,必須滿足運算結果不依賴於變數的當前值,或者能夠確保只有單一的現場修改變數的值。變數不需要與其他狀態變數共同參與不變約束

第二是禁止指令重排序優化

了解完特點之後,我們下一段來到好玩的知識,也是比較有意思的階段

Go 高階併發

譯文出處 譯者 咔嘰咔嘰 校對者 fivezh 如果你曾經使用過 go 一段時間,那麼你可能了解一些 go 中的併發原語 這些語言特性和包組合在一起,為構建高併發的應用程式提供了豐富的工具集。你可能還沒有發現在擴充套件庫 golang.org x sync 中,提供了一系列更高階別的併發原語。我們將...

高效併發之鎖優化

前面討論執行緒間互斥同步的時候,提到了互斥同步對效能最大的影響是阻塞的實現,掛起執行緒和恢復執行緒操作都需要轉入核心態中完成,這些操作給系統的併發效能帶來了很大的壓力。共享資料的鎖定狀態只會持續很短一段時間,為了這段時間去掛起和恢復執行緒並不值得。如果物理機器有乙個以上的處理器,能讓兩個或以上的執行...

高效併發伺服器模型

1 單執行緒 阻塞 同步模型 適用範圍 單一連線 缺點 多連線時相互影響,乙個阻塞,別的也得不到響應 2 多程序 阻塞 同步模型 適用範圍 連線數較少,且使用的資源較多,比如檔案操作 缺點 系統程序數有上限,不適用大量併發連線,且程序間切換開銷較大 3 多執行緒 阻塞 同步模型 適用範圍 連線數較少...