
文章插圖
性能優(yōu)化是指在不影響正確性的前提下,使程序運(yùn)行得更快,它是一個(gè)非常廣泛的話題 。
優(yōu)化有時(shí)候是為了降低成本,但有時(shí)候,性能能決定一個(gè)產(chǎn)品的成敗,比如游戲服務(wù)器的團(tuán)戰(zhàn)玩法需要單服達(dá)到一定的同時(shí)在線人數(shù)才能支撐起這類玩法,而電信軟件的性能往往是競標(biāo)的核心競爭力,性能關(guān)乎商業(yè)成敗 。
軟件產(chǎn)品多種多樣,影響程序執(zhí)行效率的因素很多,因此,性能優(yōu)化,特別是對不熟悉的項(xiàng)目做優(yōu)化,不是一件容易的事 。
性能優(yōu)化可分為宏觀和微觀兩個(gè)層面 。宏觀層面包括架構(gòu)重構(gòu),而微觀層面,則包括算法的優(yōu)化,編譯優(yōu)化,工具分析,高性能編碼等,這些方法是有可能獨(dú)立于具體業(yè)務(wù)邏輯,因而有更加廣泛的適應(yīng)性,且更易于實(shí)施 。
具體到性能優(yōu)化的方法論,首先,應(yīng)建立度量,你度量什么,你得到什么 。所以,性能優(yōu)化測試先行,須基于數(shù)據(jù)而不能憑空猜測,這是做優(yōu)化的一個(gè)基本原則 。搭建真實(shí)的壓測環(huán)境,或者逼近真實(shí)環(huán)境,有時(shí)候是困難的,也可能非常耗費(fèi)時(shí)間,但它依然是值得的 。
有許多工具能幫助我們定位程序瓶頸,有些工具能做很友好的圖形化展示,定位問題是解決問題的前置條件,但定位問題可能不是最難的,分析和優(yōu)化才是最耗時(shí)的關(guān)鍵環(huán)節(jié),修改之后,要再回歸測試,驗(yàn)證是否如預(yù)期般有效 。
什么是高性能程序?架構(gòu)致廣遠(yuǎn)、實(shí)現(xiàn)盡精微 。
架構(gòu)優(yōu)化的關(guān)鍵是識別瓶頸,這類優(yōu)化有很多套路,比如通過負(fù)載均衡做分布式改造,比如用多線程協(xié)程做并行化改造,比如用消息隊(duì)列做異步化和解耦,比如用事件通知替代輪詢,比如為數(shù)據(jù)訪問增加緩存,比如用批處理+預(yù)取提升吞吐,比如IO與邏輯分離、讀寫分離等等 。
架構(gòu)調(diào)整和優(yōu)化雖然收效很大,卻因受限于各種現(xiàn)實(shí)因素,因而并不總是可行 。
能不做的盡量不做、必須做的高效做是性能優(yōu)化的一個(gè)根本法則,提升處理能力和降低計(jì)算量可視為性能優(yōu)化的兩個(gè)方向 。
怎么讓程序跑的更快?這要求我們充分利用硬件的各種特性,想方設(shè)法減少等待并且提高并發(fā),提升CACHE命中率,使用更高效的結(jié)構(gòu)和算法;而降低計(jì)算量,則可能意味著要跳出純技術(shù)范疇,從產(chǎn)品和業(yè)務(wù)視角去審視:哪些功能是必須的,哪些功能是可選可配置的 。
有時(shí)候,我們不得不從細(xì)節(jié)的維度去改進(jìn)程序 。通常,我們應(yīng)該使用簡單的數(shù)據(jù)結(jié)構(gòu)和算法,但如有必要,就應(yīng)積極使用更高效的結(jié)構(gòu)和算法,不止邏輯結(jié)構(gòu),物理結(jié)構(gòu)(實(shí)現(xiàn))同樣影響執(zhí)行效率;分支預(yù)測、反饋優(yōu)化、啟發(fā)性以及基于機(jī)器學(xué)習(xí)編譯優(yōu)化的效果日益凸顯;熟練掌握編程語言深刻理解標(biāo)準(zhǔn)庫實(shí)現(xiàn)能幫助我們規(guī)避低性能陷阱;深入細(xì)節(jié)做代碼微調(diào)甚至指令級優(yōu)化有時(shí)候也能取得意想不到的效果 。
有時(shí)候,我們需要做一些交換,比如用空間置換時(shí)間,比如犧牲一些通用性可讀性換取高性能,我們只應(yīng)當(dāng)在非常必要的情況下才這么做,它是權(quán)衡的藝術(shù) 。
## 1、架構(gòu)優(yōu)化
通常系統(tǒng)的throughput越大,latency就越高,但過高的latency不可接受,所以架構(gòu)優(yōu)化不是一味追求throughput,也需要關(guān)注latency,追求可接受latency下的高throughput 。
### 負(fù)載均衡
負(fù)載均衡其實(shí)就是解決一個(gè)分活的問題,對應(yīng)到分布式系統(tǒng),一般在邏輯服的前面都會安放一個(gè)負(fù)載均衡器,比如NGINX就是經(jīng)典的解決方案 。負(fù)載均衡不限于分布式系統(tǒng),對于多線程架構(gòu)的服務(wù)器內(nèi)部,也需要解決負(fù)載均衡的問題,讓各個(gè)worker線程的負(fù)載均衡 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時(shí)就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- seo白帽和黑帽區(qū)別 seo白帽優(yōu)化技術(shù)
- vray常用材質(zhì)參數(shù)大全 vray玻璃材質(zhì)怎么調(diào)
- SEO重要的標(biāo)簽 seo標(biāo)簽怎么優(yōu)化
- 經(jīng)常用酵母蒸饅頭到底好不好 經(jīng)常用酵母蒸饅頭好嗎
- SEO關(guān)鍵詞排名優(yōu)化 有哪些網(wǎng)站可以推廣
- 常用Linux網(wǎng)絡(luò)命令匯總 linux打開網(wǎng)頁命令
- 酒店常用的滅火器有哪些呢
- 超詳細(xì)的 JS 數(shù)組方法 js的數(shù)組有哪些常用方法
- excel最常用的八個(gè)函數(shù) 函數(shù)的應(yīng)用知識點(diǎn)
- 住酒店日常英語口語對話 酒店常用英語口語
