共享内存是nginx进程间通信的重要机制,本文讲从共享内存的使用与原理进行剖析。
使用
nginx提供给模块开发者一些共享内存api
数据结构
1 | struct ngx_shm_zone_s { |
ngx_shm_zone_s用于在nginx cycle中记录某一个共享内存块
ngx_shm_t用来记录共享内存块的信息
api
添加共享内存
ngx_shared_memory_add(ngx_conf_t cf, ngx_str_t name, size_t size, void *tag)
param:
- ngx_conf_t *cf 配置文件环境
- ngx_str_t *name 共享内存名
- size_t size 共享内存大小
- void *tag 共享内存去重标签
return: ngx_shm_zone_t*
原理
slab内存管理机制
内存分配机制:
- best-fit 遍历所有内存块区块,找到最合适的区块进行分配 慢-但是碎片少
- first-fit 遍历空闲内存块列表,找到第一块适合区块进行分配 快-但是碎片多
slab机制:best-fit