nginx中的共享内存如何使用


这篇文章主要讲解了“nginx中的共享内存如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nginx中的共享内存如何使用”吧!ngx_shmem的使用
ngx_shmem.c/h文件只是对mmap()/munmap()系统调用或者shmget()/shmdt()的一个很简单的封装。实现了ngx风格的基础库,可以申请和释放一段连续的共享内存空间。一般用于固定长度的共享数据使用,使用过程中数据长度固定不会伸缩。在ngxin中共享内存的使用流程,一般是由master进程创建,worker进程通过继承的方式获得内存指针。关于ngx_shmem的使用,可以参考ngx_event_module_init()中部分片段,这部分代码在共享内存中创建了若干个变量,用于记录各个状态(accepted/reading/writing…)的请求数量,并在ngx_event_module中的几个关键事件入口对这几个变量进行加减统计操作。实现统计所有worker进程当前的请求状态。关于这个功能的更多细节,可以查看代码中的ngx_stat_stub宏定义相关代码与ngx_http_stub_status_module。ngx_slab的使用
ngx_shmem是一层极简的封装,实现了共享内存的基本功能。但我们程序中大部分的场景共享数据并不会一个固定大小的结构,而更多是像ngx_array、ngx_list、ngx_queue、ngx_rbtree这类大小可以变化的数据结构。我们期望能有像ngx_pool_t一样可以动态申请释放空间一个内存池。ngx_slab正是一个这样的结构体,原理上与系统的malloc()有相识之处都是通过一系列算法实现对一段段内存片段的申请与释放。只不过ngx_slab操作的对象是基于ngx_shmem的共享内存。先看一下ngx_slab的接口可以看到接口并不复杂,alloc与calloc的区别在于是否对申请获得的内存段清零,_locked结尾的接口表示操作的pool已经是获取到锁的。在ngx_slab_pool_t的结构体有一个ngx_shmtx_t的互斥锁用于同步多进程同时访问pool的并发场景。注意ngx_slab_alloc()会先获取锁、然后申请空间、最后释放锁。而ngx_slab_alloc_locked()则直接申请空间,认为程序已经在其他逻辑中获得锁了。在nginx的开发中使用ngx_shmem一般需要遵循以下初始化流程:模块在配置解析过程中调用ngx_shared_memory 香港云主机_add()接口,注册一段共享内存。提供共享内存大小与内存初始化的回调函数。框架在ngx_init_cycle()中使用ngx_shmem申请内存,并初始化ngx_slab,然后回调模块注册的初始化函数模块使用ngx_slab的申请/是否接口在这个流程中,涉及到ngx_shared_memory_add()接口与对应的ngx_shm_zone_t结构体。其中值得一提的是noreuse属性,这个属性控制了在nginx的reload过程中是否会重新申请共享内存。由于关于ngx_init_cycle()函数较长,这个流程可以通过查找/* create shared memory */这个注释或者cycle->shared_memory这个对象查看相关代码。感谢各位的阅读,以上就是“nginx中的共享内存如何使用”的内容了,经过本文的学习后,相信大家对nginx中的共享内存如何使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是开发云,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: win11右下角消息栏如何关闭

这篇文章主要介绍“win11右下角消息栏如何关闭”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win11右下角消息栏如何关闭”文章能帮助大家解决问题。 1、首先我们鼠标右键点击桌面空白处,选择“显示设置” 2、进入显示…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/03 22:25
下一篇 07/03 22:25

相关推荐