定时器
服务器程序通常管理着众多定时事件,因此有效组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。位置我们要将每个定时事件封装成定时器,并使用某种容器类型的数据结构,比如链表、排序链表和时间轮将所有定时器串联起来,以实现对定时事件的统一管理。
Linux提供三种定时方法:
1.socket选项SO_RECVTIMEO和SO_SNDTIMEO。
2.SIGALRM信号
3.I/O复用系统调用的超时参数
socket选项SO_RCVTIMEO和SO_SNDTIMEO
SO_RCVTIMEO和SO_SNDTIMEO选项分别用来设置socket接收数据超时时间和发送数据超时时间。因此这两个选项仅对数据接收和发送相关的socket专用系统调用有效,这些系统调用包括send、sendmsg、recv、recvmsg、accept和connect。
程序清单1展示了使用SO_SNDTIMEP选项来定时:
SIGALRM信号
由alarm和