為什麼我們對併發(concurrency)感興趣?
軟體可能需要響應看似隨機的外部事件
如果有多個cpu可用,並行執行任務可以提高效能
例如:乙個系統的啟動
系統的控制可以通過併發來增強
實現併發:併發機制
為了支援併發性,系統必須提供多個控制線程
常見的併發機制
- 多處理(並行)
◆多個cpu同時執行
- 多工處理(併發)
◆作業系統通過交錯執行不同任務來模擬單個cpu上的併發性
- 基於應用的解決方案(軟體實現)
◆應用軟體負責在適當的時間在不同的程式碼分支之間切換
描述執行時體系結構步驟
分析併發性要求
確定程序和執行緒
確定流程生命週期
將程序對映到實現
在程序中分配模型元素
併發要求
併發需求由以下因素驅動:
- 系統必須分配的程度。
- 系統事件驅動的程度。
- 關鍵演算法的計算強度。
- 環境支援的並行執行的程度
併發需求按照解決衝突的重要性排列。
示例:併發需求
在課程註冊系統中,併發需求來自需求和體系結構:
- 多個使用者必須能夠同時執行他們的工作
- 如果學生在制定課程安排(包括該課程)時課程設定已滿,則必須通知學生
- 基於風險的原型發現,如果沒有創造性地使用中間層處理能力,遺留課程目錄資料庫不能滿足我們的效能需求
關鍵概念:程序(process)和執行緒(thread)
程序:提供重量級的控制流
- 是獨立的
- 可以分成單獨的執行緒
執行緒:提供輕量級的控制流
- 在封閉程序中執行
識別程序和執行緒
對於系統所需的每個單獨的控制流,建立乙個程序或執行緒
- 可能需要單獨的控制線程來:
◆使用多個cpu和/或節點
◆提高cpu利用率
◆服務時間相關的事件
◆優先活動
◆實現可擴充套件性(負載分擔)
◆分開軟體領域之間的關注
◆提高系統可用性
◆支援主要子系統
程序建模
程序可以被建模為
- 活動類(類圖)和物件(互動圖)
- 元件(元件圖)定型:<< process >>或<< thread >>
過程關係可以建模為依賴關係
描述執行時體系結構步驟
分析併發性要求
確定程序和執行緒
確定流程生命週期
將程序對映到實現
在程序中分配模型元素
建立和銷毀程序和執行緒
單程序架構
程序建立在應用程式啟動時發生
當應用程式結束時會發生程序銷毀
多程序架構
新程序通常是從應用程式啟動時建立的初始程序建立的
每個過程都必須單獨銷毀
將程序對映到實現
程序和執行緒必須對映到特定的實現結構
注意事項
過程耦合
效能要求
系統程序和執行緒限制
現有的執行緒和程序
ipc(電路資源)資源可用性
設計元素分配
給定類或子系統的例項必須在至少乙個程序中執行
他們可能在多個程序中執行
設計元素到流程的注意事項
基於:效能和併發性要求
分發要求和對並行執行的支援
冗餘和可用性要求
要考慮的類/子系統特徵:
自治(autonomy)
從屬關係(subordination)
持久化(persistence)
分配(distribution)
資料持久
持久資料儲存就是即使在伺服器崩潰的情況下仍能存在的資料儲存
美國國家標準與技術研究所(美國國家標準與技術研究院)定義了三種級別的持久資料:
部分持久資料是一種僅允許對最新版本更新的持久資料結構
持久資料是一種保留其舊版本的資料結構;即,以前版本和當前版本都可能被查詢
完全持久資料是一種維護其資料的所有版本並允許對這些版本更新的持久資料結構
大多數業務應用程式至少提供部分持久資料。這種型別的永續性在事務中期或者甚至在請求中期出現系統故障時容易遭破壞,這會導致資料不完整且常常遭毀壞
另一方面,在持久資料實現中,對系統中斷或故障以「回滾(回滾)」回應,資料狀態被回滾到上乙個已知的良好配置
持久資料實現在企業體系結構和資料庫管理系統(dbms)中很常見
完全持久資料實現的非常少見。完全持久資料實現的少數幾個示例有:日誌記錄檔案系統,vms檔案系統(如vax和mac os x)以及併發版本控制系統(cvs)
設計元素到流程策略
兩種策略(同時使用)
由內而外
密切合作並且必須以相同的控制線程執行的組元素
不相互作用的單獨元素
重複,直到達到仍然存在的最小程序數
提供所需的分配和有效的資源利用
由外而內
為每個外部刺激定義乙個單獨的控制線程
為每個服務定義乙個單獨的伺服器控制線程
減少可支援的執行緒數量
建模元素到過程的對映
類圖- 作為程序的活動類
- 從程序到類的組成關係
- 從程序到子系統的組成關係
程序關係
程序關係必須支援設計元素關係
檢查點:描述執行時體系結構
描述併發活動的目的是什麼?
什麼是過程? 什麼是執行緒?
描述識別過程時的一些注意事項。
描述將類和子系統對映到程序的兩種策略。
你如何建模過程檢視?
使用什麼建模元素和圖表?
mysql 體系結構 了解MySQL體系結構
mysql 資料庫體系結構圖 mysql 由以下幾部分組成 1 connectors 不同語言中與 sql 的互動 show variables like connection variable name value character set connection utf8 collation c...
簡述mysql體系結構 MySQL體系結構
一 mysql登入方式 一 tcp ip方式 遠端 本地 mysql uroot poldboy123 h 10.0.0.51 p3306 二 socket方式 mysql uroot poldboy123 s tmp mysql.sock 二 例項介紹 例項 mysqld後台守護程序 主線程 ma...
軟體體系結構 軟體體系結構概論
開學到現在我已經上了三節軟體體系結構的課程,現在我想把自己學到的整理歸納一下。此篇隨筆對應於教材軟體體系結構概論一章。首先談一談我剛接觸這門課程是的感受。那就是 我靠 軟體也會有體系結構?以前只學過資料結構 演算法 基本的程式語言,覺得程式設計無非就是使用者給我需求,我便按照需求來程式設計序就好,從...