性能優化技巧之三個層次
編者按:性能優化,簡而言之,就是在不影響系統運行正確性的前提下,使之運行地更快,完成特定功能所需的時間更短。本文是性能優化系列文章的***篇,主要講解性能優化的三個方面。
性能優化有三個層次:
◇系統層次
◇算法層次
◇代碼層次
系統層次關注系統的控制流程和數據流程,優化主要考慮如何減少消息傳遞的個數;如何使系統的負載更加均衡;如何充分利用硬件的性能和設施;如何減少系統額外開銷(比如上下文切換等)。
算法層次關注算法的選擇(用更高效的算法替換現有算法,而不改變其接口);現有算法的優化(時間和空間的優化);并發和鎖的優化(增加任務的并行性,減小鎖的開銷);數據結構的設計(比如lock-free的數據結構和算法)。
代碼層次關注代碼優化,主要是cache相關的優化(I-cache, D-cache相關的優化);代碼執行順序的調整;編譯優化選項;語言相關的優化技巧等等。
性能優化需要相關的工具支持,這些工具包括編譯器的支持;CPU的支持;以及集成到代碼里面的測量工具等等。這些工具主要目的是測量代碼的執行時間以及相關的cache miss, cache hit等數據,這些工具可以幫助開發者定位和分析問題。
性能優化和性能設計不同。性能設計貫穿于設計,編碼,測試的整個環節,是產品生命周期的***個階段;而性能優化,通常是在現有系統和代碼基礎上所做的改進,屬于產品生命周期的后續幾個階段(假設產品有多個生命周期)。性能優化不是重新設計,性能優化是以現有的產品和代碼為基礎的,而不是推倒重來。性能優化的方法和技巧可以指導性能設計,但兩者的方法和技巧不能等同。兩者關注的對象不同。性能設計是從正向考慮問題:如何設計出高效,高性能的系統;而性能優化是從反向考慮問題:在出現性能問題時,如何定位和優化性能。性能設計考驗的是開發者正向建設的能力,而性能優化考驗的是開發者反向修復的能力。兩者可以互補。
后續會就工具,架構,算法,代碼,cache等方面展開討論這個話題,敬請期待。
【編輯推薦】