nginx 缓冲区构造
和缓冲区有关的最基本的是三个结构:ngx_buf_t、ngx_chain_t、ngx_bufs_t
分别代表 缓冲区、链表、缓冲区尺寸。
一块缓存区可以存放多段数据,因此在nginx中缓存结构被这样定义:
struct ngx_buf_s {
u_char *start; //缓冲区首部
u_char *end; //缓冲区尾部
u_char *pos; //当前指针所在位置
u_char *last; //有效数据的尾部
...
}
按照这种道理end永远不小于last,例如缓存区一共申请了10个单元,而目前只填充了6个单元,那么last为6,end为10。
为了区分是那种类型的缓冲,在这个结构中还有一些标识,例如:
ngx_file_t *file; //文件结构指针
unsigned memory:1; //是否在内存中
unsigned mmap:1; //内存中的文件映射
unsigned recycled:1; //被回收
unsigned in_file:1; //文件缓冲
unsigned flush:1; //被清除
unsigned sync:1; //异步
unsigned last_in_chain:1; //链表的尾部
unsigned temp_file:1; //是否是临时文件中的缓冲
通过一个8位存储了一个缓冲区的8种状态,在C语言里这种方式比较经济节省。在高级语言里,是尝不到这种便宜的。
链表结构ngx_chain_t是单向链表结构。