nginx 缓冲区构造

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是单向链表结构。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值