併發程式設計中的重重量級模型和輕量級模型

2022-03-10 08:38:01 字數 1699 閱讀 5436

併發程式設計中的重重量級模型和輕量級模型

使用輕量級併發開發

不管是amdahl定律還是gustafson的定律都沒有考慮引入併發需要付出的額外開銷。同時也沒有考慮那些可以將順序**轉變成可以利用並行優勢的演算法的設計模式。重要的是減少程式中必須執行的順序**,改善對並行執行單元的利用。

以前的.net 版本,如果你想在乙個程序內並行執行c#應用程式,你必須建立和管理多執行緒(軟體執行緒)。所以,你必須編寫複雜的多執行緒**。分解演算法到多個執行緒上,協調不同的**單元,在它們之間共享資訊,並且收集執行結果確確實實是一件複雜的程式設計工作。隨著邏輯核心的增多,情況變得甚至更糟了,因為你需要更多的執行緒來獲取更好的可伸縮性。

多執行緒模型的設計並不是為了幫助開發人員應對多核革命的。事實上,建立乙個新的執行緒需要很多很多的處理器資源,並且把每乙個演算法分解到並行的執行緒上會引入很多的開銷。大多有用的結構和類的設計並不能被不同的執行緒同時訪問,所以必須新增很多的**處理這種情況。這些額外的**是開發人員難以專注主要目的:利用並行執行改善程式效能。

因為這種多執行緒模型處理多核併發太複雜了,所以這就是眾所周知的重量級併發模型。這引入了額外的負擔。由於在框架級別缺乏對多執行緒互訪的支援,為了解決這個問題需要新增太多的**,這使**異常的難理解。

前面提到的與先前.net提供的多執行緒模型有關的問題和現代微處理器不斷增加的邏輯核心的數目,促使建立新的模型編寫併發**。新的模型就是眾所周知的輕量級併發模型,因為它減少了在不同的邏輯核心上建立和執行**的代價。但是這並不意味著它消除了引入併發導致的所有代價,但是這個模型是為現在多核微處理器的開發設計的。重量型併發模型是在多處理器時代產生的,當時乙個電腦可以有很多個只有乙個物理核心的微處理器。輕量級併發模型考慮了某些物理核心支援很多邏輯核心的架構。

輕量級併發模型並不僅僅是排程不同物理核心的負載。它同時增加了對框架級別多執行緒互訪問的的支援,同時使**更加簡單易於理解。

幾乎所有的現代程式語言都將要轉向支援輕量型的併發模型。幸運的.net 4就是其中的一員。所以,所有可以生成.net應用程式的託管語言都可以利用這種新的模型。

建立良好的基於任務模型的設計

有的時候,你必須優化乙個已存的解決方案以便充分利用並行的特性。在這種情況下,有必須理解已經存在的序列設計,理解採用的並行演算法是否會降低伸縮性,否則你必須進行重構以在不引入問題或者產生不同結果情況下獲取效能的提公升。你可以將問題的一部分或者整個問題建立基於任務模型的設計,然後你就可以引入並行了。當你設計新的解決方案的時候,也可以應用相同的技術。

依據以下步驟你可以建立有效的基於任務模型的設計:

1.將每個問題分解成很多的小問題,並且忘記有關序列執行的東西。

2.向下面一樣考慮與每個子問題有關的東西:

可以併發處理的資料,就將資料進行分解實現併發。

需要很多任務和一些複雜並行處理的資料,就分解這些資料和任務來實現併發。

可以並行執行的任務,就分解這些任務來實現併發。

3.組織你的設計展現併發意圖。

4.確定串聯不同子問題需要的任務。盡量的避免產生依賴。

5.時刻謹記以併發和潛在的並行思想進行設計。

6.分析並行問題的執行計畫需要考慮現在的多核微處理器和將來的架構。為獲取更好的伸縮性進行設計。

7.盡可能的最小化危險的部分。

8.無論何時,盡可能的使用基於任務模型實現併發程式設計。

9.協調步調,不斷迭代重複這些步驟。

前面提到的步驟並不意味著所有的子問題都可以成為執行在不同的執行緒上的並行任務。

Java併發 偏向鎖 輕量級鎖 重量級鎖

鎖的狀態一共有四種 無鎖 偏向鎖 輕量級鎖 重量級鎖 鎖的狀態儲存在物件的標頭檔案中,以32位jdk為例 鎖狀態25 bit 4bit 1bit 2bit 23bit 2bit 是否是偏向鎖 鎖標誌位 輕量級鎖 指向棧中鎖記錄的指標 00重量級鎖 指向互斥量 重量級鎖 的指標 10gc標記空11 偏...

nginx屬於輕量級服務 後端重量級的服務關閉問題

nginx屬於輕量級服務 自身沒有維護檔案系統,沒有資料 重啟kill都問題不大後端重量級的服務 mysql mongodb自身帶檔案系統,只能用自身的命令停止關閉。最差 kill 9,pkill 測試 3306 command pid user fd type device size off no...

無鎖狀態,偏向鎖狀態,輕量級鎖狀態和重量級鎖

鎖可以公升級但不能降級,意味著偏向鎖公升級成輕量級鎖後不能降級成偏向鎖。這種鎖公升級卻不能降級的策略,目的是為了提高獲得鎖和釋放鎖的效率 偏向鎖自旋鎖 輕量級鎖 重量級鎖 偏向鎖是指一段同步 一直被乙個執行緒所訪問,那麼該執行緒會自動獲取鎖。降低獲取鎖的代價。輕量級鎖是指當鎖是偏向鎖的時候,被另乙個...