共享内存中使用指针_详解nginx中共享内存的使用

本文介绍了Nginx中用于进程间通信的共享内存机制,重点讲解了ngx_shmem和ngx_slab的使用。ngx_shmem是简单封装的共享内存,适用于固定长度数据;ngx_slab则是一个内存池,支持动态分配和释放。在Nginx启动时,由master进程创建共享内存,worker进程继承。文章还探讨了ngx_slab的接口和初始化流程,并推荐了ngx_http_limit_conn_module作为学习实例。
摘要由CSDN通过智能技术生成

概述

在nginx的进程模型下,类似流量统计、流量控制、数据共享、等需要多个工作进程共同配合完成任务,共享内存是一个重要的进程通讯的方案。本文介绍在nginx的代码中与共享内存相关的功能,包括ngx_shmem与ngx_slab的使用与注意事项,但不包括ngx_slab中实现的内存管理算法。


ngx_shmem的使用

ngx_shmem.c/h文件只是对mmap()/munmap()系统调用或者shmget()/shmdt()的一个很简单的封装。实现了ngx风格的基础库,可以申请和释放一段连续的共享内存空间。一般用于固定长度的共享数据使用,使用过程中数据长度固定不会伸缩。

typedef struct { u_char *addr; size_t size; ...} ngx_shm_t;ngx_int_t ngx_shm_alloc(ngx_shm_t *shm);void ngx_shm_free(ngx_shm_t *shm);

在ngxin中共享内存的使用流程,一般是由master进程创建,worker进程通过继承的方式获得内存指针。

关于ngx_shmem的使用,可以参考ngx_event_module_init()中部分片段,这部分代码在共享内存中创建了若干个变量,用于记录各个状态(accepted/reading/writing...)的请求数量,并在ngx_event_module中的几个关键事件入口对这几个变量进行加减统计操作。实现统计所有worker进程当前的请求状态。

shm.size = size;ngx_str_set(&shm.name, "nginx_shared_zone");shm.log = cycle->log; if
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值