並行的代價
並行的代價
天下沒有免費的午餐,對於並行來說也是一樣。
可能我們看到並行的代價第一反應就是複雜度以及額外的工作量。總體上來講,並行的複雜度一般來說都會高於序列。開發一款軟體,一個開發團隊的開發能力總是會高於團隊中一個單獨程式設計師的(假設他們水平都差不多)。然而一個由10人組成的團隊開發能力能達到單獨程式設計師的10倍麼?顯然不可能。因為相對於一個獨立開發的程式設計師來說,團隊開發時我們需要合理拆分開發任務,需要管理團隊中程式設計師的工作內容和進度,需要協調不同程式設計師開發的模組之間的對接...於是專案管理、軟體工程、系統架構成了一個一個獨立的課題,每個課題對於現代軟體開發來說都是重點,也是難點。
類比到計算機程式的並行,雖然並行能給我們帶來很多好處,但引入並行就意味著程式的複雜度上升,並且帶來很多其他的難點:程式/執行緒之間的通訊、資源競爭、程式/執行緒的管理維護、異常處理等等(和軟體團隊的管理很像吧,這也是我一直把平行計算問題當做程式設計問題中的管理問題來看的緣由)。然而相比於這些問題來說,更大的難點在於:如何設計一個併發程式?
在前文已經有所提及,從某個層面來看,只有併發程式才是可並行的。所以對於原本我們用序列方法解決的問題來說,想並行化來提高效率,首先要做的工作是將大問題分解成一個個能夠獨立解決的小問題。既然分解得到的小問題是互相獨立的,那麼它們就能轉變成一個併發問題,從而並行執行。但對於大多數問題來說,這樣的分解過程相當困難。
當然也不用被嚇到,在軟體這個充滿分享精神的行業裡,總有很多“模式”可以套用。《七週七併發模型》一書就歸納總結了一些常用的併發模型,從技術實現和設計角度上都具有很大的參考價值。
在本節的最後,不得不提醒一句:軟體行業沒有銀彈,並行不是萬能良藥。技術的選擇在於根據實際環境所進行的衡量和取捨,這也正是工程學的魅力所在。如果瞭解過計算機的底層介面演變,並口到串列埠的演變作為例子在這裡提出來非常合適:依照正常的思維,並行傳輸資料總是會比序列傳輸來得更快,但為什麼並口會被串列埠替換掉?為什麼SAS(Serial Attached SCSI,穿行連線SAS介面)和SATA(穿行ATA)硬碟會大規模替換早期的PATA(並行ATA)硬碟?這些都是值得思考的問題。
相關文章
- 執行計劃的代價估算
- 陣列的最大代價陣列
- 多執行緒的代價及上下文切換執行緒
- DEVOPS也是要有代價的dev
- arraysize/TDU/SDU的設定對sql執行代價的影響SQL
- 最小連通代價
- 技術債務真正的代價
- 使用JDK16支援的Loom虛擬執行緒的代價 – WebtideJDKOOM執行緒WebIDE
- 函式呼叫的代價與優化函式優化
- 沒學過C語言的代價C語言
- 模型表示及代價函式模型函式
- [譯] 程式設計師開會的代價程式設計師
- 往返讀取後臺資料的代價
- Oracle的並行Oracle並行
- 並行的威力並行
- 蘋果iPhone歷代成本對比 初代價效比封神蘋果iPhone
- java----volatile, 用更低的代價替代同步Java
- 替換資料庫的代價與真假國產資料庫
- 【點陣圖索引】在點陣圖索引列上進行更新操作的鎖代價研究索引
- Oracle並行操作——淺議使用並行的時機Oracle並行
- 英特爾 13 代酷睿處理器國行價格公佈,售價2499 ~ 4899 元
- Oracle並行操作——並行DML操作Oracle並行
- oracle的並行世界Oracle並行
- Oracle中的並行Oracle並行
- 成為真正的變革型CIO,代價幾何?
- 【dp】51nod 1270 陣列的最大代價陣列
- 並行並行
- 並行執行並行
- Oracle並行操作——從序列到並行Oracle並行
- 保供應、穩就業的民生行業最需精準防疫:以最小代價實現最大效果就業行業
- 科技巨頭的裁員潮:AI轉型的代價是同事?AI
- RMAN備份的並行並行
- Oracle的並行操作[轉]Oracle並行
- 極長序列、極快速度:面向新一代高效大語言模型的LASP序列並行模型並行
- Oracle並行操作——並行查詢(Parallel Query)Oracle並行Parallel
- LLM並行訓練5-MoE並行並行
- Oracle中的並行系列(二):你設定的並行真的生效了嗎?Oracle並行
- 如何取得Oracle並行執行的traceOracle並行