由于基于升序定时器链表的添加定时器效率偏低,所以本博文介绍一种高效的定时器---时间轮;
时间轮:包含时间间隔si,时间轮槽数N,运行一周所用的时间是si*N。每一个槽就是一个无序的定时器链表,并且拥有统一的特征,定时时间相差N*si整数倍。
时间轮的优势在于采用哈希表的思想,将定时器散列在不同的定时器链表中,这样插入定时器的效率不受定时器数目影响。
那么很显然,要提高定时精度,si值越小越好;要提高执行效率,N的值越大越好。
下面使用代码介绍一种简单的时间轮,简单是因为只有一个轮子。当然我们可以使用很多轮子,例如水表、机械手表模型;
<span style="font-size:14px;">#ifndef TIME_WHEEL_TIMER
#define TIME_WHEEL_TIMER
#include <time.h>
#include <netinet/in.h>
#include <stdio.h>
#define BUFFER_SIZE 64
class tw_timer;
struct client_data//用户数据结构
{
sockaddr_in address;
int sockfd;
char buf[ BUFFER_SIZE ];
tw_timer* timer;
};
class tw_timer//定时器结构
{
public:
tw_timer( int rot, int ts )
: next( NULL ), prev( NULL ), rotation( rot ), time_slot( ts ){}
publ