效能點:
i/o,系統呼叫,併發/鎖,記憶體分配,記憶體拷貝,函式呼叫消耗,編譯優化,演算法
i/o效能優化:
優化點:減少系統呼叫次數,減少磁碟讀寫次數,減少阻塞等待
優化手段:
a. 使用非阻塞模式
b. 使用帶快取的i/o,減少磁碟讀寫次數
c. i/o多路復用,select/poll/epoll
d. 非同步i/o
系統呼叫:
耗費點:使用者態和系統態切換時耗
優化點:減少不必要的系統呼叫
優化手段:
a. i/o操作,根據具體情況,使用stdio庫代替read/write
b. 縮減不必要的系統呼叫,
併發/鎖:
併發處理(多執行緒、多程序)在一定條件下可提公升效能,
但如果存在共享資源,則需要有互斥鎖的開銷。
鎖的優化:
a. 執行緒本地變數,避免存在共享資源
b. 減少鎖的粒度
c. 無鎖演算法,如使用atomic實現的無所佇列
d. 演算法上減少對共享資源的訪問, 如多版本演算法
記憶體分配:
涉及系統呼叫和系統記憶體分配的鎖操作。
優化點:減少記憶體分配/釋放的次數和頻繁度
優化手段:
a. 一次分配多次使用,如記憶體池
b. 系統記憶體分配替代庫,如tcmalloc提高多執行緒環境記憶體分配
c. 提公升物件重用程度,避免重複構造和析構
記憶體拷貝:
優化點:減少記憶體的拷貝操作
優化手段:
a. 利用指標、引用代替數值拷貝
b. 寫時複製技術,兩個物件同時引用乙份資料,只有當其中乙個物件需要改寫資料時,才拷貝出乙個資料副本。
(std::string採用寫時複製, 因此一般情況下函式按值傳遞和返回std::string,不存在字串複製操作)
函式呼叫消耗:
函式呼叫時存在棧分配初始化以及後續的棧**操作。
優化手段:
a. 簡單的函式,使用巨集或內聯方式
編譯優化:
使用編譯器的優化選項,帶來額外的效能提公升
演算法:針對特定的需求提公升演算法優化程度,如減少迴圈處理次數,使用高效能排序和搜尋演算法等。
關於程式效能及優化
作為程式設計師經常被提及要對自己的 負責,要盡可能的優化我們寫的 保證高效性 時間和空間的效率都要考慮 尤其是我們在去微軟這類公司面試的時候,經常會被要求做這些優化的遊戲。於是我們會有一種感覺,看到一段 就想去進行優化,力求演算法更優,行數更少。雖然很多時候 行數並不影響我們的程式執行效率,但是程式...
程式效能的優化
現代編譯器使用精妙的演算法去確定哪些變數需要去計算以及這些變數的怎麼去使用,這樣就可以去簡化表示式,減少某個計算任務所需要的時間。大部分的編譯器,包括gcc,會給程式設計師一些介面去控制優化的程度,比如 gcc o1 就是給程式一些基本的優化,當帶上的引數為 o2,o3的時候,就會給程式更深層次的優...
iOS程式效能優化 一
深入淺出cocoa ios程式效能優化 羅朝輝 ios應用是非常注重使用者體驗的,不光是要求介面設計合理美觀,也要求各種ui的反應靈敏,我相信大家對那種一拖就卡卡卡的 tableview 應用沒什麼好印象。還記得12306麼,那個速度,相信大家都受不了。為了提高 ios 的執行速度,下面我將拋磚引玉...