1. 程式人生 > 其它 >提高應用程式效能技術

提高應用程式效能技術

本節討論了一些提高應用程式效能的常用技術:選擇UO大小、快取、緩衝區、輪詢、併發和並行、非阻塞 JO 和處理器繫結。參考應用程式文件看看這些技術哪些在應用,看看有沒有應用程式其他的獨有特性。

  1. 選擇IO尺寸

執行 IO的開銷包括初始化緩衝區、系統呼叫、上下文切換、分配核心元資料、檢查程序許可權和限制、對映地址到裝置、執行核心和驅動程式碼來執行IO,以及,在最後釋放元資料和緩衝區s

“初始化開銷”對於小型和大型的IO都是差不多的。從效率上來說,每次IO傳輸的資料越多,效率越高。

  1. 快取

作業系統用快取提高檔案系統的讀效能和記憶體的分配效能,應用程式使用快取也出於類似的原因。將經常執行的操作的結果儲存在本地快取中以備後用,而非總是執行開銷較高的操作、資料庫緩衝區快取記憶體就是一例,該快取會儲存經常執行的資料庫查詢結果。

部署應用程式時,一個常見的操作就是決定用什麼樣的快取,或能啟用什麼樣的快取,然後配置適合系統的快取尺寸。

快取一個重要的方面就是如何保證完整性,確保查詢不會返回過期的資料。這稱為快取致性(cache coherency),而且執行的代價不低理想情況下,不要高於快取所帶來的益處

快取提高了讀操作效能,儲存通常用緩衝區來提高寫操作的效能

  1. 緩衝區

為了提高寫操作效能,資料在送人下一層級之前會合並放在緩衝區中。這增加了IO大小提升了操作的效率。取決於寫操作的型別,這樣做可能會增加寫延時,因為第一次寫人緩衝區後,在傳送之前,還要等待後續的寫人

環形緩衝區(或迴圈緩衝區)是一類用於元件之間連續資料傳輸的大小固定的緩衝區,緩衝區的操作是非同步的。該型別緩衝可以用頭指標和尾指標來實現,指標隨著資料的增加或移出而改變位置

  1. 輪詢

輪詢是系統等待某一事件發生的技術,該技術在迴圈中檢查事件狀態,兩次檢查之間有停頓。輪詢有一些潛在的效能問題:

  • 重複檢查的CPU開銷高昂
  • 事件發生和下一次檢查延時較高

這是效能問題,應用程式應能改變自身行為來監聽事件發生,當事件發生時立即通知應用程式並執行相應的例程

poll系統呼叫

有系統呼叫po11()來檢查檔案描述符的狀態,提供與輪詢相似的功能,不過它是基於事件的,因此沒有輪詢那樣的效能負擔

poll()介面支援多個檔案描述符作為一個數組,當事件發生要找到相應的檔案描述符時需要應用程式掃描這個陣列。這個掃描是O(n)(參見5.1.4節中的介紹),擴充套件時可能會變成個性能間題:在Linux裡是epoll(),epoll()避免了這種掃描,複雜度是O(1)。基於Solaris的系統有一個相似的特性叫作事件埠 (eventponts),用port_get(3C)代替了Po11()。

  1. 併發與並行
  2. 非阻塞IO
  3. 處理器繫結