hash_tbl 改造續..

  經過一晚上的倒騰... 終於重構好了hash_tbl, 思路和之前想的一樣~ , 從索引頭到衝突鏈都使用數組實現~ 結構如下:

 

 

 

  原來協議層也用的hash_tbl進行管理, 但因爲協議是連續自增ID, 不存在動態變化的可能, 所以這塊不使用hash_tbl管理了, 直接用靜態數組進行映射.

  這樣的話, 只有邏輯層發送協議的位置有通過hash_tbl查找具體的net_buff, 不過這塊是hash_find, 並無大礙. 因爲我們關注的只是hash_foreach的調用, 儘可能的減少它的使用, 才能使程序突破瓶頸.

  重構之後, 重點的壓力比較大的hash_foreach只存在於epoll_wait線程與處理線程橋接的管道, keepalive查詢, 待釋放net_buff隊列.

 

  OK, 這樣的優化之後, 測試了下, 效果非常不錯~

  優化之後的profile:

 

 

  從上圖可以看出, foreach已經不再佔據消耗時間最多的位置,  下滑到了第8的位置, 整體性能上升了不少, 非常穩定的跑在 16000 count/per sec, 壓力測試裏每一次完整的調用包含了2次普通協議處理, 2次異步數據庫查詢, 總體來說, 還算比較滿意. :)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章