7.2 ngx_queue_t双向链表
ngx_queue_t是Nginx提供的一个基础顺序容器,它以双向链表的方式将数据组织在一起。在Nginx中,ngx_queue_t数据结构被大量使用,下面将详细介绍它的特点、用法。
7.2.1 为什么设计ngx_queue_t双向链表
链表作为顺序容器的优势在于,它可以高效地执行插入、删除、合并等操作,在移动链表中的元素时只需要修改指针的指向,因此,它很适合频繁修改容器的场合。在Nginx中,链表是必不可少的,而ngx_queue_t双向链表就被设计用于达成以上目的。
相对于Nginx其他顺序容器,ngx_queue_t容器的优势在于:
❑实现了排序功能。
❑它非常轻量级,是一个纯粹的双向链表。它不负责链表元素所占内存的分配,与Nginx封装的ngx_pool_t内存池完全无关。
❑支持两个链表间的合并。
ngx_queue_t容器的实现只用了一个数据结构ngx_queue_t,它仅有两个成员:prev、next,如下所示:
typedef struct ngx_queue_s ngx_queue_t;
struct ngx_queue_s{
ngx_queue_t*prev;
ngx_queue_t*next;
};
因此,对于链表中的每个元素来说,空间上只会增加两个指针的内存消耗。
使用ngx_queue_t时可能会遇到有些让人费解的情况,因为链表容器自身是使用ngx_queue_t来标识的,而链表中的每个元素同样使用ngx_queue_t结构来标识自己,并以ngx_queue_t结构维持其与相邻元素的关系。下面开始介绍ngx_queue_t的使用方法。