高效能定時器 時間堆

2021-07-02 16:00:56 字數 874 閱讀 9464

時間堆

時間輪給我們的感覺依舊不夠精細,因為它是按照時間間隔來執行定時器的。

時間堆的設計思路是:

將所有定時器中超時時間最小的定時器的超時值作為心博間隔。一旦心博函式被呼叫,超時時間最小的定時器必然到期,我們就可以準確的處理它。然後,再從剩餘的定時器中找出超時時間最小的那個,作為下一次心博時間,這樣,就顯得較為精準了。

這裡我們採用最小堆處理這個問題。

#ifndef min_heap_timer

#define min_heap_timer

#include #include #include #define buf_size 64

struct client_date

;class heap_timer

void (*cb_func)(client_date*);

};class time_heap

}//析構函式

~time_heap()

array[s] = timer;

}//刪除目標定時器

void void del_timer(heap_timer *timer)

//獲取頂部定時器

heap_timer *top()

//刪除頂部定時器

void del_top()

}//心搏函式

void tick()

}bool empty()

//調整函式(向下)

void adjust_down(int s)

else

break;

}array[s] = tmp;

}//擴大堆陣列的容量

void resize()

};

時間堆實現定時器

時間堆 將所有定時器中超時最小的乙個作為心搏間隔,這樣,一旦心搏函式tick被呼叫,超時時間最小的乙個定時器必然到期,我們就可以在tick函式裡處理該定時器,這樣就實現了較為精確的定時 最小堆很適合這種方案,最小堆的堆頂永遠為最小的元素,這樣每次只要將堆頂的定時器處理,並將下乙個堆頂元素的超時時間作...

php實現毫秒定時器(時間堆)

最近研究workerman原始碼,學習了定時器部分,從裡面抄了乙個定時器出來,單獨出來,有利於理解定時器原理。下面是 呼叫方式跟workerman一樣,都是新增定時事件進去,可以使延時呼叫一次,也可以是定時呼叫,間隔一段事件就執行一次。測試執行,在命令列裡面,執行php timer.php即可。可以...

定時器 時間配置

cron表示式是乙個字串,字串以5或6個空格隔開,分為6或7個域,每乙個域代表乙個含義,cron有如下兩種語法格式 seconds minutes hours dayofmonth month dayofweek year或 seconds minutes hours dayofmonth mont...