婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > nginx中共享內存的使用詳解

nginx中共享內存的使用詳解

熱門標簽:高德地圖標注無營業執照 智能電話機器人線路 賀州市地圖標注app 百度地圖標注要不要錢 江蘇電銷外呼防封系統是什么 廣州電銷機器人系統圖 東莞人工智能電銷機器人供應商 金融行業外呼線路 長沙開福怎么申請400電話

在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 (ngx_shm_alloc(&shm) != NGX_OK) {
  return NGX_ERROR;
}

shared = shm.addr;
...
ngx_stat_accepted = (ngx_atomic_t *) (shared + 3 * cl);
ngx_stat_handled = (ngx_atomic_t *) (shared + 4 * cl);
ngx_stat_requests = (ngx_atomic_t *) (shared + 5 * cl);
ngx_stat_active = (ngx_atomic_t *) (shared + 6 * cl);
ngx_stat_reading = (ngx_atomic_t *) (shared + 7 * cl);
ngx_stat_writing = (ngx_atomic_t *) (shared + 8 * cl);
ngx_stat_waiting = (ngx_atomic_t *) (shared + 9 * cl);

關于這個功能的更多細節,可以查看代碼中的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的接口

typedef struct {
  ngx_shmtx_t    mutex;
  ...
  void       *data; /* 一般存放從pool中申請獲得的根數據地址(pool中第一個申請的數據接口) */
  void       *addr; /* 使用ngx_shmem申請獲得的共享內存基地址 */
} ngx_slab_pool_t;

void ngx_slab_init(ngx_slab_pool_t *pool);
void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size);
void *ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size);
void *ngx_slab_calloc(ngx_slab_pool_t *pool, size_t size);
void *ngx_slab_calloc_locked(ngx_slab_pool_t *pool, size_t size);
void ngx_slab_free(ngx_slab_pool_t *pool, void *p);
void ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p);

可以看到接口并不復雜,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結構體。

struct ngx_shm_zone_s {
  void           *data;
  ngx_shm_t         shm;
  ngx_shm_zone_init_pt   init;
  void           *tag;
  void           *sync;
  ngx_uint_t        noreuse; /* unsigned noreuse:1; */
};
ngx_shm_zone_t *ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name,
  size_t size, void *tag);

其中值得一提的是noreuse屬性,這個屬性控制了在nginx的reload過程中是否會重新申請共享內存。

由于關于ngx_init_cycle()函數較長,這個流程可以通過查找/* create shared memory */這個注釋或者cycle->shared_memory這個對象查看相關代碼。

關于ngx_slab更多細節的使用,建議可以參考ngx_http_limit_conn_module,這是通過共享內存實現連接數限制的模塊,模塊復雜度底,是一個很好的參考范例。

 參考資料

深入理解Nginx(第2版) https://book.douban.com/subject/26745255/

ngx_http_limit_conn_module http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:松原 北京 張家界 玉樹 洛陽 滄州 永州 廊坊

巨人網絡通訊聲明:本文標題《nginx中共享內存的使用詳解》,本文關鍵詞  nginx,中,共享,內存,的,使用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《nginx中共享內存的使用詳解》相關的同類信息!
  • 本頁收集關于nginx中共享內存的使用詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    eeuss国产一区二区三区| 亚洲日韩欧美一区二区在线| 91丝袜美女网| 国产精品一区二区你懂的| 韩国v欧美v亚洲v日本v| 国产成人在线看| 色综合久久88色综合天天| 欧美日韩一级黄| 91精品国产色综合久久久蜜香臀| 欧美一级精品在线| 欧美激情综合五月色丁香小说| 国产精品久久久久精k8| 一区二区久久久久久| 美国av一区二区| 91污片在线观看| 日韩一区二区在线观看视频| 国产午夜亚洲精品不卡| 亚洲人妖av一区二区| 亚洲成人在线观看视频| 国产综合成人久久大片91| 99久久婷婷国产| 91精品国产综合久久久久久久久久 | 久久久不卡网国产精品二区| 欧美韩国日本不卡| 亚洲一级在线观看| 成人欧美一区二区三区白人 | 91精品国产综合久久福利软件 | 国产精品1区2区3区| 欧美色图一区二区三区| 国产日韩在线不卡| 久久精品国产精品亚洲红杏| 91视频xxxx| 色视频一区二区| 国产亚洲女人久久久久毛片| 五月婷婷久久综合| 99在线热播精品免费| 欧美一区二区三区视频在线| 1000部国产精品成人观看| 极品少妇一区二区三区精品视频| av成人动漫在线观看| 日韩一区二区三区在线| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲v日本v欧美v久久精品| 免费在线观看不卡| 国产**成人网毛片九色| 欧美丝袜自拍制服另类| ww久久中文字幕| 亚洲欧洲av一区二区三区久久| 久久99精品国产.久久久久久| 欧美日韩一区二区三区高清| 一区二区三区高清不卡| 色婷婷一区二区| 亚洲免费观看高清完整版在线观看| 激情综合一区二区三区| 日韩一区二区免费电影| 午夜精品福利久久久| 91久久国产最好的精华液| 亚洲国产高清aⅴ视频| 国产精品一二三四区| 欧美不卡激情三级在线观看| 蜜臀va亚洲va欧美va天堂| 91国偷自产一区二区开放时间| 国产色产综合产在线视频| 麻豆精品精品国产自在97香蕉| 欧美精品高清视频| 亚洲线精品一区二区三区八戒| 97精品超碰一区二区三区| 国产精品你懂的在线| 成人午夜av在线| 国产精品久久久久久久久久免费看| 久久精品国产在热久久| 日韩一区二区电影| 亚洲第一激情av| 欧美系列亚洲系列| 国产精品18久久久久久久久 | 蜜臀精品一区二区三区在线观看| 欧美伊人精品成人久久综合97 | 成人一区二区三区在线观看 | 97精品久久久久中文字幕| 亚洲第一二三四区| 91美女福利视频| 亚洲激情第一区| 国产91精品露脸国语对白| 久久女同性恋中文字幕| 一区二区国产盗摄色噜噜| 欧美久久一二三四区| 国产日产欧美精品一区二区三区| 亚洲电影激情视频网站| 亚洲成人手机在线| 懂色av一区二区三区免费观看 | 国产精品久久久久久久久免费丝袜 | 一区二区三区91| 国产传媒日韩欧美成人| 依依成人精品视频| 一区二区三区精品久久久| 7777女厕盗摄久久久| 午夜精品一区在线观看| 色婷婷av一区二区三区大白胸| 日本欧美一区二区在线观看| 国产成人精品在线看| 国产精品久久网站| 久久久精品一品道一区| 亚洲444eee在线观看| 麻豆91在线看| 麻豆国产欧美一区二区三区| 国产不卡视频一区| 久久综合精品国产一区二区三区| 日本特黄久久久高潮| 欧美日韩你懂的| 亚洲亚洲精品在线观看| 欧美专区亚洲专区| 亚洲成人动漫av| 欧美日韩一二三| 国产精品久久久久影院| 国产成人免费9x9x人网站视频| 成人爱爱电影网址| 精品剧情在线观看| 国产一区三区三区| 91在线视频在线| 国产精华液一区二区三区| 日韩精品在线看片z| 欧美视频在线一区二区三区| 亚洲观看高清完整版在线观看| 国产女主播一区| 精品亚洲国产成人av制服丝袜 | 石原莉奈在线亚洲二区| 亚洲色图在线视频| 91丝袜国产在线播放| 一级做a爱片久久| 欧美日韩国产精品自在自线| 免费看黄色91| 欧美少妇bbb| 色婷婷久久久亚洲一区二区三区 | 91蜜桃传媒精品久久久一区二区 | 国产欧美视频一区二区| 国产激情一区二区三区| 中文字幕精品在线不卡| 欧美www视频| 欧美丰满嫩嫩电影| 免费精品视频在线| 日韩激情视频在线观看| 精品国产一区二区三区久久影院| 欧美视频一区在线| 91影院在线观看| 日韩成人精品在线观看| 国产精品一区二区果冻传媒| 综合久久久久综合| 国产精品二三区| 欧美色综合影院| 成人激情开心网| 国产伦精品一区二区三区视频青涩| 国产欧美精品一区| 国产精品天美传媒| 精品国产乱码久久久久久久久| 岛国一区二区在线观看| 国产传媒欧美日韩成人| 亚洲人成网站色在线观看| 国产精品美女久久久久aⅴ | 五月婷婷激情综合网| 色香蕉久久蜜桃| 色网站国产精品| 国产成人激情av| 日韩国产成人精品| 人人超碰91尤物精品国产| 成人免费va视频| av在线播放不卡| 久久99精品国产91久久来源| 亚洲综合成人在线| 久久久国产综合精品女国产盗摄| 欧美午夜影院一区| 日韩一区二区三区电影| 2021久久国产精品不只是精品| 在线观看视频一区二区欧美日韩| 91麻豆swag| 曰韩精品一区二区| 日韩国产在线观看| 青青草97国产精品免费观看无弹窗版 | 亚洲免费观看高清完整版在线 | 一区二区三国产精华液| 日本一区二区三区免费乱视频| 日本一区二区动态图| 色哟哟国产精品| 在线成人午夜影院| 2019国产精品| 不卡一区在线观看| 欧美午夜在线一二页| 91视频免费看| 欧美成人性福生活免费看| 国产三级一区二区| 亚洲啪啪综合av一区二区三区| 亚洲超丰满肉感bbw| 亚洲成人免费影院| 韩国精品在线观看| 精品国产一区二区精华| 亚洲乱码精品一二三四区日韩在线| 亚洲综合精品自拍| 同产精品九九九| 成人在线综合网| 制服丝袜在线91| 欧美性淫爽ww久久久久无|