穩定高併發高效能程式設計原則簡單總結

2021-08-17 10:25:21 字數 1345 閱讀 9179

穩定性是第一前提,如系統崩潰恢復容災備份這些,主要是一些資料保護的機制,還有就是程式引數的校驗、異常的處理、事務的回滾、程式邊界的設計(合理的邊界劃分可以避免服務的連鎖崩潰)、對賬機制等,這些都是日常生活中常用的一些手段在計算機領域的體現,更詳細的設計就不深入的分析了。

通過多年來對作業系統的研究,以及結合多年來各種語言的程式設計經驗來說,高效能的程式的開發其實都是有規可循的。因為高效能的程式基本上都會面臨相似的問題:如何提高併發,如何降低時間複雜度(但是並不是一味的降低,需要在空間複雜度之間做乙個平衡)。

如何提高併發:在目前的大多數程式中或多或少的都會遇到併發的問題,如何設計高效的併發非常的重要,從我個人的經驗來說,當遇到乙個會存在併發的業務場景,我會首先整理業務場景,並根據業務場景畫出簡單的資料流圖,根據資料流圖找出相應的會併發訪問修改的資料,縮小加鎖的粒度(只對需要併發訪問的資料進行加鎖),。

然後分析資料的性質是否可以區域性的併發,這種情況下就可以使用分段鎖(再次減小加鎖的粒度,乙個比較出名的例子就是mysql的表鎖、行鎖機制)。

最後再分析資料的訪問性質,是讀多寫少(大部分都是這種情況)、讀少寫多(日誌)、還是讀寫頻率差不多,不同的業務情況使用不同的鎖,比如針對讀多寫少的業務來說,為了提高讀的併發性可以使用讀寫鎖;針對併發粒度較小,且併發操作的耗時很短的情況,作業系統又提出了cas操作(樂觀鎖),這種操作避免了上鎖和釋放鎖耗時的過程,進一步提高了併發性,但是只是針對特定的場景才能達到想要的效能。

當單臺併發達到上限之後,就是分布式系統粉墨登場了,雖然分布式系統資料一致性會有一定的耗時,但是分布式系統的併發卻有了顯著的提高,一致性所帶來的耗時/併發數帶來的平均延遲並不大,所以能很好的滿足系統的需求。

高效能的設計主要分為兩個層面,乙個層面是作業系統層面的,另外乙個層面是業務層。

作業系統層面:盡量使用作業系統和處理器自身的高效能的指令或者是運算方式,最簡單的例子是位運算,針對一些特殊的演算法如果能使用位運算實現,那麼盡量使用位運算實現(這在很多演算法面試題中都會考的,因為位運算在很多場景都有特別切合實際的使用),還有就是合理高效的使用作業系統自身的api,如dma之類的機制,以及有效的利用快取之類的機制。

業務層面來說:首先需要為資料的儲存設計合適的資料結構,這個也需要在空間利用率和訪問複雜度之間做權衡;然後為業務中需要計算的場景設計高效的演算法,演算法的抽象是乙個比較難的事情,演算法設計需要在時間複雜度和空間複雜度中做權衡,還有就是針對演算法的特性進行優化,可以參考演算法設計,如果演算法具有分治、動態規劃這些演算法的特性,那麼此類演算法可以採用併發機制提高演算法的效能(演算法設計很複雜,演算法本身涉及到的很多高等數學的知識,還有就是演算法的實現是否更加符合計算機的執行機制,建議多看看acm演算法設計相關書籍)

高可用,高併發,高效能

高併發 是網際網路分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。高併發相關常用的一些指標有響應時間 response time 吞吐量 throughput 每秒查詢率qps query per second 併發使用者數等。吞吐量 單位時間內處理的請...

高併發 高效能 高可用

高效能是指程式處理速度非常快,所佔記憶體少,cpu佔用率低。高效能的指標經常和高併發的指標緊密相關,想要提高效能,那麼就要提高系統發併發能力,兩者互相 在一起。應用效能優化的時候,對於計算密集型和io密集型還是有很大差別,需要分開來考慮。還有可以增加伺服器的數量,記憶體,io等引數提公升系統的併發能...

高效能高併發系統架構(一)

在網際網路高速發展,資料海量儲存的時代,構架高效能 高可用性的應用支撐大量併發訪問,在現代物聯網 網際網路架構時代是至重要的。穩定而又可以水平擴充套件的架構是應用程式執行的基礎。下面開始介紹個人在架構方面多年經驗的總結。1 架構分類 架構分為硬體架構 軟體架構和演算法架構 通過需求分析,定位目標使用...