如何處理I/O開銷

  • 2019 年 10 月 4 日
  • 筆記

向上生長, TO BE TO UP. 程式設計師成長充電站

如何成為優秀程式設計師第 9/100 期分享

閱讀本文大概需要 2 分鐘

01

構建一個快速的系統通常是一個提高 I/O

在很多問題上,處理器的速度比硬體交流要快得多。這種代價通常是小的 I/O,可能包括網路消耗,磁碟 I/O,資料庫查詢,文件 I/O,還有其他與處理器不太接近的硬體使用。所以構建一個快速的系統通常是一個提高 I/O,而非在緊湊的循環里優化程式碼或者甚至優化演算法的問題。

02

兩種基本的技術來優化 I/O

有兩種基本的技術來優化 I/O:快取和代替(比如用短的字元代表長的字元)。快取是通過本地存儲數據的副本,再次獲取數據時就不需要再執行 I/O,以此來避免 I/O(通常避免讀取一些抽象的值)。快取的關鍵在於要讓哪些數據是主幹的,哪些數據是副本變得顯而易見。主幹的數據只有一份(在一個更新周期里)。快取有這樣一種危險:副本有時候不能立刻反映主幹的修改。

代替是通過更高效地表示數據來讓 I/O 更廉價。這通常會限制其他的要求,比如可讀性和可移植性。

代替通常可以用他們第一實現中的兩到三個因子來做優化。實現這點的技術包括使用二進位表示而非人類可識別的方式,傳遞數據的同時也傳遞一個符號表,這樣長的符號就不需要被編碼,一個極端的例子是哈弗曼編碼。

另一種有時能夠用來優化本地引用的技術是讓計算更接近數據。例如,如果你正在從資料庫讀取一些數據並且在它上面執行一些簡單的計算,比如求和,試著讓資料庫伺服器去做這件事,這高度依賴於你正在工作的系統的類型,但這個方面你必須自己探索。

下一節:如何管理記憶體

Tags: