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