golang 效能優化之累加雜湊

2021-09-13 22:21:43 字數 1118 閱讀 7928

很多時候效能問題總是發生在一些不起眼的地方。最近做乙個效能問題分析的時候發現,乙個函式裡面使用由於字串拼接產生的臨時字串導致記憶體**了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)"這些結果最後都應該是一致的,利用這個特性,就能做到對多個字串雜湊而不用拼接

type stringhasherbkdr uint64

// newstringhasherbkdr 建立乙個新的 hasher

func newstringhasherbkdr() stringhasherbkdr

// addstr 增加乙個字串

func (bkdr stringhasherbkdr) addstr(str string) stringhasherbkdr

return stringhasherbkdr(val)

}// addint 新增乙個 int 值

func (bkdr stringhasherbkdr) addint(i uint64) stringhasherbkdr

// val 轉成 uint64 的值

func (bkdr stringhasherbkdr) val() uint64

使用上也很簡單

hasher := newstringhasherbkdr()

so(hasher.addstr("hello world").val(), shouldequal, hasher.addstr("hello").addstr(" ").addstr("world").val())

golang效能優化

效能優化 cpu 1去除不必要的序列化 反序列化 2控制goroutine數量,避免goroutine洩露 3提公升cpu利用率,使用中斷機制讓cpu以更少代價io 記憶體 1減少gc 減少string值拷貝,使用byte string.stringbuilder 2struct型別字段順序 3預分...

效能優化之PHP優化

1.使用apache下的ab工具進行效能測試 測試 ab n100 c100 請求100次,併發量是100 關注兩個量 requests per second 每秒請求數 和time per request 平均響應時間 2.盡量使用php內建變數,常量,函式,原因 php 需要經過zend引擎獨行...

python 之效能優化

類似 os.linesep 這樣的名字需要直譯器做兩次查詢 1 查詢os 以確認它是乙個模組,2 在這個模組中查詢 linesep 變數。因為模組也是全域性變數,我們多消耗了系統資源。如 果你在乙個函式中類似這樣頻繁使用乙個屬性,我們建議你為該屬性取乙個本地變數別名。變 量查詢速度將會快很多 在查詢...