婷婷综合国产,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
    777午夜精品视频在线播放| 一区二区三区四区高清精品免费观看| 久久久精品欧美丰满| 一区二区在线观看视频在线观看| 日本最新不卡在线| 99精品国产视频| 精品国产三级a在线观看| 国产欧美精品一区二区色综合| 一区二区三区在线不卡| 日本网站在线观看一区二区三区| 精品中文字幕一区二区小辣椒| 欧洲一区在线观看| 欧美精品一区二区三区久久久| 亚洲综合在线视频| 成人动漫在线一区| 欧美videofree性高清杂交| 亚洲欧洲国产专区| 国产九色精品成人porny| 一区二区三区小说| av网站一区二区三区| 欧美国产亚洲另类动漫| 国产一区二区0| 欧美精品一区二区高清在线观看| 日韩av电影天堂| 欧美高清一级片在线| 视频一区二区三区中文字幕| 欧美性受xxxx黑人xyx性爽| 亚洲精选视频免费看| 欧美无砖专区一中文字| 亚洲一二三四区| 91麻豆免费看| 亚洲成人高清在线| 日韩欧美另类在线| 蜜桃视频一区二区三区在线观看 | 成人理论电影网| 国产精品色婷婷久久58| 成人一级片网址| 亚洲男人天堂av网| 欧美日韩激情一区二区| 三级亚洲高清视频| 日韩欧美国产精品| 国产精品亚洲第一| 亚洲色图20p| 欧美人xxxx| 国产乱子轮精品视频| 18成人在线视频| 56国语精品自产拍在线观看| 黑人巨大精品欧美一区| 国产精品嫩草影院com| 91视频观看免费| 免费人成黄页网站在线一区二区| 久久综合久久鬼色| 99re热这里只有精品视频| 亚洲高清三级视频| 亚洲国产精品黑人久久久| 欧美日韩在线播放一区| 国产一区二区精品久久| 亚洲自拍偷拍麻豆| 久久蜜桃av一区二区天堂| 91官网在线免费观看| 国产一二三精品| 亚洲成人av一区二区| 亚洲国产精品av| 91精品国产综合久久香蕉麻豆| 成人午夜视频福利| 日韩国产成人精品| 亚洲一区二区精品3399| 欧美国产精品一区| 欧美一区二区精品在线| 色偷偷88欧美精品久久久| 国产伦精一区二区三区| 日韩高清在线电影| 亚洲综合清纯丝袜自拍| 欧美精品一区二区久久久| 91精品国产综合久久香蕉麻豆| 色菇凉天天综合网| 91免费精品国自产拍在线不卡| 韩国av一区二区| 久久精品国产免费| 美女高潮久久久| 日本不卡一二三| 久久99日本精品| 麻豆高清免费国产一区| 日本欧美肥老太交大片| 日韩精品电影在线| 日韩中文欧美在线| 天天做天天摸天天爽国产一区| 亚洲激情第一区| 亚洲第一综合色| 免费成人av资源网| 久久精品国产亚洲5555| 国产69精品久久777的优势| 成人午夜视频网站| 在线亚洲免费视频| 欧美一区二区性放荡片| 精品国产凹凸成av人网站| 国产欧美一区二区三区鸳鸯浴 | 麻豆视频一区二区| 国产成人精品综合在线观看 | 秋霞国产午夜精品免费视频| 美女视频一区二区| 精品国产伦一区二区三区观看体验 | 99精品一区二区三区| 91色.com| 欧美军同video69gay| 日韩精品一区二区三区视频在线观看 | 99久久精品国产精品久久| 在线视频一区二区三| 一本大道久久a久久精品综合| 91成人在线精品| 欧美videossexotv100| 最新国产成人在线观看| 五月激情综合网| 成人av资源站| 精品人在线二区三区| 国产精品午夜免费| 丝袜亚洲精品中文字幕一区| 成人免费精品视频| 精品国产成人在线影院| 亚洲欧美日韩国产综合在线| 久久99国产精品麻豆| 欧美日韩久久一区| 综合色天天鬼久久鬼色| 久久国产精品一区二区| 欧美性极品少妇| 国产麻豆成人精品| 日韩一级片网址| 丝袜国产日韩另类美女| 欧美午夜寂寞影院| 亚洲女同一区二区| 国产成人综合在线观看| 91精品国模一区二区三区| 亚洲综合色自拍一区| 91丨porny丨首页| 中文字幕免费不卡在线| 韩国精品主播一区二区在线观看| 欧美日韩黄色影视| 午夜国产不卡在线观看视频| 欧美日韩一区二区三区不卡| 亚洲精品国产一区二区三区四区在线| 夫妻av一区二区| 国产欧美一区二区三区鸳鸯浴| 久久激情综合网| 久久日一线二线三线suv| 久久成人久久爱| 久久综合色之久久综合| 国产高清不卡一区| 国产精品国产自产拍高清av王其 | 国产成人精品网址| 国产精品久久久久久久久动漫| 成人高清视频免费观看| 国产日韩欧美精品一区| 九一久久久久久| 国产欧美一二三区| 色一区在线观看| 亚洲一区在线看| 日韩欧美亚洲一区二区| 成人av在线影院| 亚洲欧美国产三级| 欧美三级中文字幕| 麻豆91免费观看| 中文字幕乱码亚洲精品一区 | 欧洲生活片亚洲生活在线观看| 日本午夜精品视频在线观看| 国产午夜精品一区二区三区嫩草| 国产成人啪免费观看软件| 国产午夜精品一区二区三区嫩草 | 日韩三级视频中文字幕| 国产一区二区三区美女| 亚洲丝袜制服诱惑| 欧美一区二区久久久| 91视频一区二区三区| 国产尤物一区二区| 日韩电影在线免费观看| 中文字幕亚洲区| 日韩精品一区二区三区视频播放| 99久久国产综合色|国产精品| 日本人妖一区二区| 一区二区三区不卡视频| 久久综合网色—综合色88| 51精品国自产在线| 99精品久久久久久| 丁香天五香天堂综合| 免费在线一区观看| 亚洲黄色录像片| 中文字幕综合网| 中文文精品字幕一区二区| 精品久久五月天| 欧美群妇大交群的观看方式| 成人动漫在线一区| 成人开心网精品视频| 粉嫩嫩av羞羞动漫久久久| 国产美女一区二区| 精品一区二区在线播放| 日本三级韩国三级欧美三级| 午夜欧美在线一二页| 亚瑟在线精品视频| 亚洲最大成人综合| 亚洲成人高清在线| 狠狠色狠狠色综合系列|