2018年7月19日 星期四

Go重構帶來 23X 效能的過程

非常值得一讀的效能優化文章, 沒有時間可以跳到最後面的 take away
 作者由於研讀了一篇關於 good code and bad code 的指引, 由於該篇文章文章提及了”效能”這件事, 作者便開始了驚人的優化過程, 最終達到 23X 的執行效能
看似簡單且輕描淡寫的過程, 其實可以看出功力深厚, 這些做法包含了大量的專業知識, 以下為其使用的技巧
1. 確認單執行緒效能 (不能為了平行而平行, 而忽略 overhead 嚴重性)
2. 使用 slice 避免記憶體配置 (能 in memory 處理的要盡可能這麼作, 記憶體配置成本高昂)
3. 以簡單的方式取代 regex (你需要的功能比你認為的少)
4. custom trim 實作
5. batching (批次處理能有效節省單次 overhead)
6. 手動指定 worker thread 數目 (依照系統調整執行緒數目那避免 thread racing 造成的 context switch)
7. custom lexical parser 實作(強大的工具伴隨複雜的行為)
這過程使用了涵蓋大量出於程式語言, 作業系統, I/O 行為, 效能分析, 計算架構等等諸多方面的知識, 效能優化由於需要分析諸多不同層面的問題, 因此是一門需要長期耕耘各種領域的專業

沒有留言:

在 ARM 平台上使用 Function Multi-Versioning (FMV) - 以使用 Android NDK 為例

Function Multi-Versioning (FMV) 過往的 CPU 發展歷程中, x86 平台由於因應各種應用需求的提出, 而陸陸續續加入了不同的指令集, 此外也可能因為針對市場做等級區隔, 支援的數量與種類也不等. 在 Linux 平台上這些 CPU 資訊可以透過...