golang 效能優化之累加雜湊
很多時候效能問題總是發生在一些不起眼的地方。最近做一個效能問題分析的時候發現,一個函式裡面使用由於字串拼接產生的臨時字串導致記憶體上漲了40%(120G 記憶體的機器),而這些臨時字串給 GC 也帶來了非常大的負擔,成為主要的效能瓶頸,而這些字串作為 map 的 key,又必須要拼接,所以想到了直接使用 hash 後的值作為 map 的 key,而這個 hash 值使用累加 hash 計算得出。
所謂累加 hash,就是對字串的 hash 可以分為任意多段,對每一段連續 hash,結果累加,對於任意一種分段方式,最後能得到一致的 hash 結果,比如:H.hash("hello world")
, H.hash("hello").hash(" ").hash("world")
, H.hash("hello wo").hash("rld)"
這些結果最後都應該是一致的,利用這個特性,就能做到對多個字串雜湊而不用拼接
BKDR hash 實現
type StringHasherBKDR uint64
// NewStringHasherBKDR 建立一個新的 Hasher
func NewStringHasherBKDR() StringHasherBKDR {
return StringHasherBKDR(0)
}
// AddStr 增加一個字串
func (bkdr StringHasherBKDR) AddStr(str string) StringHasherBKDR {
val := uint64(bkdr)
for i := 0; i < len(str); i++ {
val = val*131 + uint64(str[i])
}
return StringHasherBKDR(val)
}
// AddInt 新增一個 int 值
func (bkdr StringHasherBKDR) AddInt(i uint64) StringHasherBKDR {
val := uint64(bkdr)
val = val*131 + i
return StringHasherBKDR(val)
}
// Val 轉成 uint64 的值
func (bkdr StringHasherBKDR) Val() uint64 {
return uint64(bkdr)
}
使用上也很簡單
hasher := NewStringHasherBKDR()
So(hasher.AddStr("hello world").Val(), ShouldEqual, hasher.AddStr("hello").AddStr(" ").AddStr("world").Val())
參考連結
相關文章
- golang 效能優化之 bitset 代替 hashsetGolang優化
- Golang net/http 效能優化GolangHTTP優化
- Golang效能分析與優化Golang優化
- redis之雜湊Redis
- 雜談WebApiClient的效能優化WebAPIclient優化
- Hash,雜湊,雜湊?
- 雜湊遊戲之雜湊盒子的趨勢未來可期遊戲
- 六、Android效能優化之UI卡頓分析之渲染效能優化Android優化UI
- Android效能優化之佈局優化Android優化
- 七夕也要學起來,雜湊雜湊雜湊!
- SwissTable:高效能雜湊表實現
- 前端效能優化之Lazyload前端優化
- Android 效能優化之記憶體優化Android優化記憶體
- Android效能優化篇之服務優化Android優化
- 雜湊
- Android 效能優化(十二)之我為什麼寫效能優化Android優化
- 雜湊表(雜湊表)原理詳解
- 【尋跡#3】 雜湊與雜湊表
- js 雜湊雜湊值的模組JS
- 菜鳥學Python之雜湊表Python
- 資料結構之「雜湊表」資料結構
- 「LeetCode Top100」之雜湊篇LeetCode
- JS效能優化 之 FOR迴圈JS優化
- 效能優化之拋棄Calendar優化
- React效能優化方案之PureRenderMixinReact優化
- Linux 效能優化之 cup 篇Linux優化
- Linux 效能優化之 IO 篇Linux優化
- React效能優化方案之PureComponentReact優化
- 4、React元件之效能優化React元件優化
- 雜湊索引索引
- 樹雜湊
- 2024.3.26 雜湊
- 雜湊碰撞
- 字串雜湊字串
- 雜湊表
- JAVA資料結構之雜湊表Java資料結構
- 【前端效能優化】vue效能優化前端優化Vue
- Alink漫談(九) :特徵工程 之 特徵雜湊/標準化縮放特徵工程