




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
化與Profiling首先,提到高性能編碼,你肯定聽現(xiàn)代計算機科學(xué)的鼻祖高德納(DonaldKnuth)的Weshouldforgetaboutsmallefficiencies,sayabout97%ofthetime:prematureoptimizationistherootofallevil.Yetweshouldnotpassupouropportunitiesinthatcritical3%.我們應(yīng)該忘掉那些效率低下的事情,告誡自己在97%源。但是,我們也不應(yīng)該在關(guān)鍵的3%——ComputerProgrammingasanArt(1974)不過,可能很多程序員都只記住了這句話的前半部分,“97%的情況下,過早優(yōu)化是萬惡之源”,而沒有注意到這句話還有后半句:我們不應(yīng)該放棄掉那關(guān)鍵的3%的優(yōu)化機所以這樣造成的就是:過度推崇不要對代碼進行提前優(yōu)化,并以此來作為編寫性能C++所以高性能實現(xiàn)的第二個原因代1代1publicclass789Channel[]publicChannels()channels=new}publicreceiveData(...){....}//收到數(shù)據(jù)更新ChannelpublicbooleanhasData //for(ChannelChannel:{if(Channel.dataSize>0){returntrue;}}return}}2{class3publicString4publicint5}6那么在看完代碼之后,你覺得這段代碼實現(xiàn)中的方法hasDat如果你只是根據(jù)這段代碼實現(xiàn)來進行分析,會發(fā)現(xiàn)它好像沒有啥性能問題。畢竟,針對一0個元素的數(shù)組來說,使用二分法查找來提升查找速度的必要性不太大。其實,就我的思考和實踐經(jīng)驗來說,在開發(fā)一個高性能軟件系統(tǒng)的時候,在編碼階段考慮高性能的實現(xiàn)方法,與完成業(yè)務(wù)功能后再進行代碼調(diào)優(yōu)之間并不,這二者應(yīng)該被同等地重視起來。因為前期的高性能編碼實現(xiàn)過程,很多都是由人來控制的,所以可能會由于判斷確或者實現(xiàn)過程不,引入一些低效率的代碼實現(xiàn)。這樣一來,期通過熱點代碼分析以及代碼調(diào)優(yōu)的過程,就是不能省略的。所以,今天我主要是從編寫的代碼映射到執(zhí)行過程的角度和,分別是循環(huán)實現(xiàn)、函數(shù)方法實現(xiàn)、表達式實以及中,實現(xiàn)的功能是循環(huán)遍歷并更新字符串中的值,你會發(fā)現(xiàn)在循環(huán)執(zhí)行的過程中,被調(diào)用了很多次,所以性能比較低。代代voidupdateStr(char*{for(inti=0;i<strlen(str);{ str[i]= 7代代voidupdateStr(char*{intlength=for(inti=0;i<length;{ str[i]= 8我們同樣也來看一個反模式的代碼示例。在下面這段代碼的實現(xiàn)過程中,xy生變化,但是在循環(huán)體中被執(zhí)行了很多遍。代代1voidinitData(int[]data,intlength,intx,int223456for(inti=0;i<length;{data[i]=x*y+}}因此,站在高性能編碼實現(xiàn)的角度,我們可以把*y其實到這里,你可以記住一句話:其實不同的編程語言,支撐函數(shù)方法內(nèi)聯(lián)的語法和機制有一定的差異。在Java語言的開發(fā)過程中,我推薦你盡量使用final來定義方法,因為這種場景下,Java的JIT會有比較大的C++InlineC的本是函針,要在過程取內(nèi)變量,來判碼需要跳轉(zhuǎn)到哪個位置。而這種運行期動態(tài)決定跳轉(zhuǎn)地址,就很容易導(dǎo)致指令集流水線的中斷,造成指令Caches的概率增大,從而引起性能下降。不過在Java語言中,因為類方法模式都是抽象的,所以我們可以將關(guān)鍵方法定義成靜態(tài)方法,從而避免多態(tài)調(diào)用;對于C++來說,在定義類方法的時候,我們可以根據(jù)需求來決定是否需要使用抽象方法,以此減少不必要的多態(tài);而在C的問題,所這里我就不展開介紹了。代代1inty=x*那么,對于高性能的編譯器來說(如新版的GCC9.x等),就可以將這個乘法操作優(yōu)化為比如你下面的代碼,這是一個包含了3個乘法運算的表達式代代1intz=32*x*432*代代12intz=x*x+y;//intz=x*(x+y);//CPU首先你要知道的是,控制流程代碼在執(zhí)行的過程中,CPU執(zhí)行會通過指令分支預(yù)測,提前將接下來的執(zhí)行指令搬移到Cache中,如果預(yù)測失敗,就有可能引起指令流水線中斷,從這里,我也給你一下我在實踐過程中總結(jié)出來的經(jīng)驗,即盡量減少不必要的分支判斷。x==2x==3代代123456789if(2==x){}if(3==x){}if(4==x){}//場景switch利用表驅(qū)動來減少switch邏輯和小的for循環(huán)平鋪執(zhí)行,等等。所以這里,我給你一個小建議,就是在一些特殊場景下(if景),你可以考慮使用switch來替換if,這樣也有可能改善代碼的執(zhí)行性能。今天這節(jié)課,我?guī)阋黄鹛接懥烁咝阅芫幋a的價值觀,其實我的觀念就是,碼實現(xiàn)需要和后期的代碼熱點調(diào)優(yōu)一起互相配合,而不是孤立地去看待其中一個,這樣才會更容易開發(fā)出高性能的軟件。另外,在明確了高性能實現(xiàn)的價值之后,你還要清楚應(yīng)該從哪些要點出發(fā),去思考實現(xiàn)高性能編碼,以及在高性能編碼中針對一些典型業(yè)務(wù)場景的實現(xiàn)。你可以先理解和掌握這節(jié)課我給你的四種高性能編碼實現(xiàn)的方法思路,然后按照這個思路,逐步積累和提升高性能編碼的能力,從而幫助你最終開發(fā)出高性能的代碼。每一種編程語言都在不斷
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025安全員-B證(項目經(jīng)理)考試題庫
- 2024年外轉(zhuǎn)子風(fēng)機項目資金籌措計劃書代可行性研究報告
- 2024年TC-22型氧化鋅脫硫劑項目資金需求報告
- 數(shù)學(xué)-云南省三校2025屆高三2月高考備考聯(lián)考卷(六)試題和答案
- 2025年度文化事業(yè)單位正規(guī)勞務(wù)派遣合作協(xié)議書
- 2025年度專業(yè)化學(xué)品倉庫庫房租賃及安全管理協(xié)議
- 二零二五年度員工股權(quán)激勵與公司可持續(xù)發(fā)展合同
- 2025年度房地產(chǎn)戰(zhàn)略合作協(xié)議書:房地產(chǎn)項目綠色建筑設(shè)計與綠色施工技術(shù)合同
- 2025年度臨時用工合同協(xié)議書:文化演出臨時演出人員及技術(shù)人員協(xié)議
- 2025年度網(wǎng)絡(luò)安全責(zé)任忠誠協(xié)議范本
- 2024年北京電子科技職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試題庫含答案解析
- 生產(chǎn)車間環(huán)境改善方案
- 第1課 古代亞非(課件)
- 2024年高考物理真題分類匯編(全一本附答案)
- 醫(yī)藥銷售月總結(jié)匯報
- 地質(zhì)勘探行業(yè)復(fù)工安全培訓(xùn)課件
- 小學(xué)語文《文學(xué)閱讀與創(chuàng)意表達》
- 醫(yī)保定點納入預(yù)測性研究的報告
- 大學(xué)體育-武術(shù)散打-教案
- 年終獎計算方案
- 模擬藥房實訓(xùn)總結(jié)報告
評論
0/150
提交評論