nginx 缓冲区构造
来源:互联网 发布:家里有蚂蚁 知乎 编辑:程序博客网 时间:2024/05/29 00:31
nginx 缓冲区构造
from http://hi.baidu.com/langwan/blog/item/822b758d5d1d9a1ab31bbaf8.html
nginx 缓冲区构造
2009-05-07 21:55
和缓冲区有关的最基本的是三个结构:
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是单向链表结构。
ngx_http_upstream_s是nginx一个核心数据结构,用于负载均衡的实现。
目前 nginx只是五种路由方式,请参考下面的资料:
http://hi.baidu.com/farmerluo/blog/item/c68173f05a5950a8a40f5290.html
简单说是 轮询、按权重、按IP的固定hash、按url的固定hash、按响应时间等
在这个结构中使用了若干缓存有关的子结构,例如:
ngx_buf_t、ngx_chain_t、ngx_output_chain_ctx_t等,具体的结构有
ngx_chain_t *out_bufs;
ngx_chain_t *busy_bufs;
ngx_chain_t *free_bufs;
ngx_chain_t *request_bufs;
因此一般的缓存会以单向链表的形式出现。
对于特定的缓存也会出现对应的缓存结构,例如:
typedef struct {
ngx_buf_t *buf;
ngx_chain_t *in;
ngx_chain_t *free;
ngx_chain_t *busy;
unsigned sendfile;
unsigned need_in_memory;
unsigned need_in_temp;
ngx_pool_t *pool;
ngx_int_t allocated;
ngx_bufs_t bufs;
ngx_buf_tag_t tag;
ngx_output_chain_filter_pt output_filter;
void *filter_ctx;
} ngx_output_chain_ctx_t;
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是单向链表结构。
ngx_http_upstream_s是nginx一个核心数据结构,用于负载均衡的实现。
目前 nginx只是五种路由方式,请参考下面的资料:
http://hi.baidu.com/farmerluo/blog/item/c68173f05a5950a8a40f5290.html
简单说是 轮询、按权重、按IP的固定hash、按url的固定hash、按响应时间等
在这个结构中使用了若干缓存有关的子结构,例如:
ngx_buf_t、ngx_chain_t、ngx_output_chain_ctx_t等,具体的结构有
ngx_chain_t *out_bufs;
ngx_chain_t *busy_bufs;
ngx_chain_t *free_bufs;
ngx_chain_t *request_bufs;
因此一般的缓存会以单向链表的形式出现。
对于特定的缓存也会出现对应的缓存结构,例如:
typedef struct {
ngx_buf_t *buf;
ngx_chain_t *in;
ngx_chain_t *free;
ngx_chain_t *busy;
unsigned sendfile;
unsigned need_in_memory;
unsigned need_in_temp;
ngx_pool_t *pool;
ngx_int_t allocated;
ngx_bufs_t bufs;
ngx_buf_tag_t tag;
ngx_output_chain_filter_pt output_filter;
void *filter_ctx;
} ngx_output_chain_ctx_t;
- nginx 缓冲区构造
- nginx 缓冲区构造
- nginx缓冲区优化
- nginx缓冲区链表chain
- LINUX安全--构造数据实现缓冲区溢出
- 在nginx中设置socket缓冲区大小
- nginx http proxy模块缓冲区管理
- Nginx内存节省之影子缓冲区
- nginx配置解析之缓冲区管理
- 13.Nginx数据结构之缓冲区Buf
- nginx哈希表数组的构造
- 缓冲区
- 缓冲区
- 缓冲区
- 缓冲区
- 缓冲区
- 缓冲区
- 缓冲区
- va_list
- VC/MFC给程序添加背景图片
- C ++的单例模式
- nginx源代码分析
- POJ A Simple Problem with Integers
- nginx 缓冲区构造
- 安装AdventureWorks、NorthWind 和Pubs示例数据库
- Nginx源代码分析 - 日志处理
- 浙大09年复试机试题目
- oracle存储过程
- freetype使用日记 -- 解决宋体,楷体中文在某些字号下无法正常显示的问题
- 验证数字的正则表达式集
- MFC中获取程序运行的路径
- 版本开发经验I