技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 查看专题: 定时器
    简单翻阅了下Redis的源码,读一款server软件的源码我一般是从进程/线程模型开始的,Redis让我有些诧异,它采用了单进程单线程的模型,一般的server软件都会采用多进程或者多线程再或者多线程多进程混合的模型来设计,从而充分利用多核处理器的并行计算能力来提高软件的性能,Redis这种模型我只能推断程序的可并行化程度不高,顺序计算反而能省去多线程同步和维护线程池/进程池的开销,我对于数据库server端的设计没有什么经验也没有太多的理解,如有谬误欢迎大家指正。 当然,这里要写的不是关于Redis的进程模型,而是Redis的事件模型和定时器模型。
    这篇文章将讲讲libevent对定时器和信号事件的处理. Timer事件 反应堆event_base包含了一个最小堆min_heap结构体的实例,以此维护注册到这个反应堆实例的定时器事件: struct event_base { //其他成员 struct min_heap timeheap; }; 回顾一下最小堆min_heap: typedef struct min_heap { //p指向一个动态分配的数组,数组元素是event指针. struct event** p; unsigned n, a; // n表示目前保存了多少元素,a表示p指向的内存能够存储event指针的个数 } min_heap_t; 可以看到,它包含一个连续的内存块用于存储定时器事件.针对min_heap的操作主要有: static inline int mi
[ 共2篇文章 ][ 第1页/共1页 ][ 1 ]
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1