libevent 發生超時後,html
while循環一次從堆頂del timer——直到最新調整的最小堆頂不是超時事件爲止,(實際是del event),可是會稍後把這個timeout的 event放到active 任務list裏,node
等待處理,event標記爲timeout,等處理actvie隊列時再由應用層callback函數決定怎麼處理標記爲timeout的事件。nginx
nginx處理超時時,直接刪除紅黑樹中( event結構體裏的 )rb node成員,同時調用應用層早已經過add timer註冊好的超時handler函數。之因此沒有用堆,函數
由於每次直接從內部刪除節點,而不是堆頂部。性能
關鍵點,採用堆,刪除時間是O(1),可是要調整堆,logn。插入時間基本是lgn。htm
採用紅黑樹,刪除節點是3次旋轉,可是,找到最小節點要logn。插入時間基本是lgn。blog
整體看,都差很少。排序
堆排序和紅黑樹性能比較 :http://blog.sina.com.cn/s/blog_56e6a0750101b0fo.html隊列