軟件最佳化
軟件最佳化(粵拼:jyun5 gin2 zeoi3 gaai1 faa3;英文:software optimization)指將一隻軟件改到更加有效率,等個系統行起上嚟唔使用咁多系統資源。簡單例子有檢查吓隻軟件嘅源碼,確保段源碼完全冇任何多餘(即係有同冇都唔會影響隻軟件嘅功效)嘅碼-想像家陣編寫緊一隻網上遊戲嘅程式,隻遊戲好受歡迎,有數以十萬計嘅玩家,如果個程式嘅源碼當中有一行多餘嘅碼,噉十萬幾位玩家玩起上嚟部伺服器就要行多十萬幾行多餘嘅碼,會搞到部伺服器嘅負責大咗好多。因為噉,最佳化喺實際嘅軟件工程工作上係一個相當受重視嘅課題[1]。
以下嘅內容,假設讀者已經識嗮電腦程式編寫嘅基礎概念。
基礎概念
[編輯]軟件最佳化係軟件工程上嘅一樣重要工序:軟件(software)泛指用嚟做某啲特定功能嘅電腦程式,例如一隻電子遊戲就係一隻用嚟做娛樂用途嘅軟件;齋靠日常觀察就可知,部電腦要行一個電腦程式,梗要或多或少噉花啲時間同埋記憶體,而事實表明,一個寫程式嘅人寫程式嗰陣用嘅手法,會對「個程式要行幾耐先行得完」(睇埋編譯期同執行期等嘅概念)或者「個程式要用幾多記憶體」造成具體影響[2][3]。
舉個簡單例子,想像家陣想寫個程式,個程式要攞個數 a
做 input,output 出嗮所有「細過或者等如 a
、又係 10 嘅倍數」嘅數,即係[4]
- 如果
input
係 200,就要出200, 190, 180, 170, 160,...
噉嘅一列數; - 如果
input
係 150,就要出150, 140, 130, 120, 110,...
噉嘅一列數;
想像下面段虛擬碼:
a = 200; # 設 a 做 200 while (a > 0) # 可以睇埋 while 迴圈嘅概念。 { b = 10; if (a % b == 0} # 如果 a 係 b 嘅倍數,print a 出嚟睇。 print(a); a -= 1; # a 數值下降 1 }
上面段碼查實唔係咁有效率-b = 10
呢個步驟唔使喺個 while 迴圈每個圈度都行一次,而因為段碼有咗不必要嘅步驟,就搞到段碼行起上嚟慢咗。上面段碼可以改做:
a = 200; b = 10; while (a > 0) { if (a % b == 0} print(a); a -= 1; }
-b = 10
呢個步驟就變成淨係做一次咁多,令到段碼效率高咗。軟件最佳化指緊嘅就係[2]:p. 1[5]:
「 | 」 |
上面攞嚟做例子嗰個程式好簡單。就算做咗最佳化,齋靠肉眼睇唔多覺佢行得快咗。不過專業軟件工程上整嗰啲軟件,好多時閒閒哋成幾萬行碼咁長,有啲甚至仲有成上億行碼[6]。對於噉嘅軟件嚟講,如果佢哋每 50 行碼就要嘥多 10 毫秒(1 毫秒 = 0.001 秒)行,已經會對佢實際用嗰陣嘅表現造成明顯影響。因為噉,專業嘅軟件工程師都相當關注最佳化嘅問題,會諗好多技巧想令啲程式更加有效率。
層面
[編輯]演算法
[編輯]源碼
[編輯]強度折減
[編輯]系統樽頸
[編輯]缺點
[編輯]睇埋
[編輯]文獻
[編輯]- Abelson, H., & Sussman, G. J. (1996). Structure and interpretation of computer programs. The MIT Press.
- Gorelick, M., & Ozsvald, I. (2020). High Performance Python: Practical Performant Programming for Humans. O'Reilly Media.
- Code Optimization (PDF). University of California, Davis, Computer Science Lecture Notes.
攷
[編輯]- ↑ Wadleigh, K. R., & Crawford, I. L. (2000). Software optimization for high-performance computing. Prentice Hall Professional.
- ↑ 2.0 2.1 Code Optimization (PDF). University of California, Davis, Computer Science Lecture Notes.
- ↑ Lowry, E. S., & Medlock, C. W. (1969). Object code optimization (PDF). Communications of the ACM, 12(1), 13-22.
- ↑ Code Optimization in Compiler Design. GeeksForGeeks. 1. Code Motion or Frequency Reduction, Example.
- ↑ Performance Optimization in Software Development. Medium.
- ↑ 5 Most Complex Software Ever 互聯網檔案館嘅歸檔,歸檔日期2022年10月8號,.. JavaScript in Plain English.
拎
[編輯]- Code Optimization in Compiler Design. GeeksForGeeks.