關於查找排序的一點總結

最近在項目中,寫協議棧的時候,需要引入消息重發機制,所以使用了資源池+隊列的方式管理需要重發的消息,消息重發按照 每隔1s 2s 4s....的方式進行,每次取隊列的第一個判斷需要重發的時間,並等待一段時間(不超過 最短重發時間,因爲可能會有新的消息加入隊列),重發完畢後,將消息的下次重發時間 刷新並插入隊列中(採用 折半查找的方式),經測試,當消息數量在8W條時,插入一條數據 大約需要50us,這樣算下來每秒最多處理2W個,再加上其他開銷,發現性能不能滿足。經思索改進如下:
1.每個消息處理完之後,都將其重發次數以及重發時間更新並加入到隊列尾部
2.取得隊首消息,判斷處理時間,並等待置處理時間,(該時間肯定小於1s)
3.處理該消息,判斷是否需要重發,如果需要重發則重發。
4.判斷是否超時,如果超時則移除該消息,跳轉至2,否則跳轉至1
改進後,效率明顯提高,每秒可處理超過10W條消息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章