### 湊零為整與化整為零
湊零為整其實(shí)的思想在日志批處理里提了,不再展開 。
化整為零體現(xiàn)了分而治之的思想,可以把一個(gè)大的操作,分?jǐn)傞_來(lái),避免在做大操作的時(shí)候?qū)е驴D,從而讓CPU占比更加平穩(wěn) 。
### 分頻
之前我優(yōu)化過一個(gè)游戲服務(wù)器,游戲服務(wù)器的邏輯線程是一個(gè)大循環(huán),里面調(diào)用tick函數(shù),tick函數(shù)里調(diào)用了所有需要check timer & do的事情,然后所有需要check timer & do的事情都塞進(jìn)tick里 。
改進(jìn):tick里調(diào)用了tick50ms、tick100ms、tick500ms,tick1000ms,tick5000ms,然后把需要check timer & do的邏輯根據(jù)精度要求塞到不同的tickXXms里去 。
### 減法
減少冗余
減少拷貝、零拷貝
減少參數(shù)個(gè)數(shù)(寄存器參數(shù)、取決于ABI約定)
減少函數(shù)調(diào)用次數(shù)/層次
減少存儲(chǔ)引用次數(shù)
減少無(wú)效初始化和重復(fù)賦值
### 循環(huán)優(yōu)化
這方面的知識(shí)很多,感覺一下子講不完,提幾點(diǎn),循環(huán)套循環(huán)要內(nèi)大外小,盡量把邏輯提取到循環(huán)外 。
提取與循環(huán)無(wú)關(guān)的表達(dá)式,盡量減少循環(huán)內(nèi)不必要計(jì)算 。
循環(huán)內(nèi)盡量使用局部變量 。
循環(huán)展開是一種程序變換,通過增加每次迭代計(jì)算的元素的數(shù)量,減少循環(huán)的迭代次數(shù) 。還有循環(huán)分塊的騷操作 。
### 防御性編程適可而止
有兩個(gè)流派,一個(gè)是完全的不信任,即所有函數(shù)調(diào)用里都對(duì)參數(shù)判斷,包括判空,有效性檢查等,但這樣做有幾點(diǎn)不好:
第一,它只是貌似更安全,并不是真的更安全 。
第二,它稀釋代碼濃度,淹沒關(guān)鍵語(yǔ)句 。
第三,如果通過返回值報(bào)告錯(cuò)誤,則加重了調(diào)用者負(fù)擔(dān),調(diào)用者需要添加額外代碼檢查,不然更奇怪 。
第四,重復(fù)判斷空耗CPU 。
第五,埋雷,把本該crash或者暴露的問題埋得更深 。
但這種做法大行其道,它有一定的市場(chǎng)和道理 。
另一個(gè)是界定邊界,區(qū)分公開接口和內(nèi)部實(shí)現(xiàn),檢查只在模塊之間進(jìn)行,就相當(dāng)于進(jìn)園區(qū)的時(shí)候,門衛(wèi)會(huì)檢查你證件,但之后,則不再檢查 。因?yàn)閮?nèi)部實(shí)現(xiàn)是受控的安全上下文,開發(fā)者應(yīng)該完全cover住 。
我主張防御性編程適可而止,但現(xiàn)實(shí)中,軟件開發(fā)通常多人合作,每個(gè)開發(fā)者素質(zhì)不一樣,這就是客觀現(xiàn)實(shí),所以我也理解前一種做法 。
### release干凈
開發(fā)過程中,我們會(huì)加很多診斷信息,比如我們可能接管內(nèi)存分配,從而附加額外的首尾部,通過填寫magic Num捕獲異?;蛘邇?nèi)存越界,但這些信息應(yīng)該只用于開發(fā)階段的DEBUG需要,在release階段應(yīng)該通過預(yù)處理的方式刪除掉 。
日志分級(jí)其實(shí)也體現(xiàn)了這種思想,通常有兩種做法,一個(gè)是定義級(jí)別變量,另一個(gè)是預(yù)處理,預(yù)處理干凈,但需要重新編譯生成image,而變量更靈活,但變量的比較還是有開銷的 。
不要忽視這些診斷調(diào)試信息的開銷,牢記不必做的事情絕不做的原則 。
### 慎用遞歸
遞歸的寫法簡(jiǎn)單,理解起來(lái)也容易,但遞歸是函數(shù)調(diào)用,有棧幀建立撤銷控制跳轉(zhuǎn)的開銷,另外也有爆棧的風(fēng)險(xiǎn),在性能敏感關(guān)鍵路徑,優(yōu)先考慮用非遞歸版本 。
## 4、編譯優(yōu)化(寫不動(dòng)了)
### inline
### restrict
### LTO
### PGO
### 優(yōu)化選項(xiàng)
## 5、其他優(yōu)化(不想寫了)
### 綁核
### SIMD
### 鎖與并發(fā)
#### 鎖的粒度
#### 無(wú)鎖編程
#### Per-cpu data structure & thread local
#### 內(nèi)存屏障
#### 異構(gòu)優(yōu)化/TCO優(yōu)化
比如用GPGPU、FPGA、SmartNIC來(lái)offload原來(lái)cpu的任務(wù),TCO優(yōu)化指的是不以性能優(yōu)化為單一指標(biāo),而是在滿足性能條件下以綜合成本為優(yōu)化直播,當(dāng)然異構(gòu)也包括主動(dòng)利用CPU的avx或者其他邏輯單元,這類優(yōu)化往往編譯器不能自動(dòng)展開(@zrg)
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 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)頁(yè)命令
- 酒店常用的滅火器有哪些呢
- 超詳細(xì)的 JS 數(shù)組方法 js的數(shù)組有哪些常用方法
- excel最常用的八個(gè)函數(shù) 函數(shù)的應(yīng)用知識(shí)點(diǎn)
- 住酒店日常英語(yǔ)口語(yǔ)對(duì)話 酒店常用英語(yǔ)口語(yǔ)
