hash_tbl 結構改造

  這兩天正在爲網絡層製作負載均衡策略, 這個具體的細節會在今後逐步寫出, 先來說說在測試負載均衡時遇到的一點問題.

 

  昨晚改好後, 負載均衡策略可以按照預期邏輯層指定的返回值進行繼續通知或者掛起~, 從而讓優先級更高連接類型獲得更多的執行權. 但是測試的結果並不像預期那樣美好, 雖然服務器不會因爲buff不足而被迫斷開連接, 但是運行效率依然和以前一樣穩步下降, 這讓我着實很惱火..., 於是直接加上 -pg參數開始profile...

 

  profile的結果讓我出乎意料, 原來瓶頸居然出現在hash_tbl中, 其3個函數運行總時間佔據了全部運行時間的80%, 經過簡單優化, 依然只能達到70%多... 囧... 如下圖..

 

 

 

  好吧, 再來重新看看這個hash_tbl的算法和結構, 該結構爲標準的拉鍊式hash結構,  一個lockfree fifo鏈表充當衝突拉鍊, 衝突鏈的遍歷佔據了50%以上的時間, 看來這塊確實效率是個嚴重的問題.

 

  考慮之後, 打算這樣改下, 不採用鏈表作爲衝突鏈, 使用變長數組作爲拉鍊, 擴張系統定爲1.5, 並額外增加一個當前使用映射表, 以便提速hash_foreach的遍歷速度 :)

 

 

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