国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > Nginx > 正文

詳解Nginx中基本的內存池初始化配置

2024-08-30 12:26:05
字體:
來源:轉載
供稿:網友

ngx_cycle 的初始化
整個初始化過程中,最重要的就是全局變量 nginx_cycle 的初始化,很多變量都是在這個過程中初始化的

nginx_cycle 又是通過兩個局部變量 init_cycle 和 cycle 實現初始化的

事實上,日志初始化也可以算是對 nginx_cyle 的初始化,因為在代碼中接下來馬上要發生的就是一個賦值

ngx_memzero(&init_cycle, sizeof(ngx_cycle_t));init_cycle.log = log;ngx_cycle = &init_cycle;// 創建內存池 1KBinit_cycle.pool = ngx_create_pool(1024, log);if (init_cycle.pool == NULL) { return 1;}// 保存調用參數到全局變量,init_cycle 只用于提供 log 參數if (ngx_save_argv(&init_cycle, argc, argv) != NGX_OK) { return 1;}// 保存配置文件路徑、程序運行路徑、調用參數到 init_cycleif (ngx_process_options(&init_cycle) != NGX_OK) { return 1;}// 獲取操作系統信息、CPU信息、最大連接數、是否支持非阻塞連接等if (ngx_os_init(log) != NGX_OK) { return 1;}/* * ngx_crc32_table_init() requires ngx_cacheline_size set in ngx_os_init() */// 對齊校驗表if (ngx_crc32_table_init() != NGX_OK) { return 1;}// 獲取所有繼承連接fd的相關信息if (ngx_add_inherited_sockets(&init_cycle) != NGX_OK) { return 1;}

 

內存池
nginx 是通過資源集中管理的方式管理資源的,即打開所有即將要用的資源,以備隨時取用,無論是文件還是內存

這樣做的好處是避免了每次創建、打開資源造成的性能消耗

因此,便有了內存池模塊,用來集中申請內存資源并進行內存資源的管理和分配

內存池結構:

// struct ngx_pool_data_t// 內存池數據塊結構 {{{typedef struct { u_char    *last;  // 當前內存分配的結束位置 u_char    *end;  // 內存池的結束位置 ngx_pool_t   *next;  // 下一內存池 ngx_uint_t   failed; // 內存分配失敗計數} ngx_pool_data_t; // }}}// struct ngx_pool_s// 內存池結構 {{{struct ngx_pool_s { ngx_pool_data_t  d;  // 內存池數據塊 size_t    max;  // 待分配內存大小 ngx_pool_t   *current; // 指向當前內存池起始位置 ngx_chain_t   *chain; ngx_pool_large_t  *large; // 指向大塊內存分配 ngx_pool_cleanup_t *cleanup; // 析構函數 ngx_log_t   *log;  // 內存分配相關的log}; // }}}

在這個函數中,使用了一個封裝好的函數 ngx_memalign,這個函數是對系統中按照數據對齊方式分配內存的函數的封裝,在不同的系統中實現方式不同,通過宏定義,實現了操作系統的適配,這是一個很漂亮的技巧

#if (NGX_HAVE_POSIX_MEMALIGN)// void * ngx_memalign(size_t alignment, size_t size, ngx_log_t *log)// 用數據對齊的方式進行內存分配 {{{void *ngx_memalign(size_t alignment, size_t size, ngx_log_t *log){ void *p; int err; // size 單位是 byte 而不是 bit err = posix_memalign(&p, alignment, size); if (err) {  ngx_log_error(NGX_LOG_EMERG, log, err,      "posix_memalign(%uz, %uz) failed", alignment, size);  p = NULL; } ngx_log_debug3(NGX_LOG_DEBUG_ALLOC, log, 0,     "posix_memalign: %p:%uz @%uz", p, size, alignment); return p;} // }}}#elif (NGX_HAVE_MEMALIGN)// void * ngx_memalign(size_t alignment, size_t size, ngx_log_t *log)// 用數據對齊的方式進行內存分配 {{{void *ngx_memalign(size_t alignment, size_t size, ngx_log_t *log)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三原县| 镇沅| 房产| 朝阳区| 遂溪县| 桃源县| 扎鲁特旗| 石家庄市| 四平市| 宁化县| 宁乡县| 泗水县| 运城市| 油尖旺区| 共和县| 北辰区| 白银市| 从江县| 武宣县| 新闻| 玉门市| 辽中县| 札达县| 赤峰市| 松滋市| 阳东县| 塔河县| 东丽区| 关岭| 垫江县| 清远市| 屏山县| 健康| 新巴尔虎左旗| 阆中市| 香河县| 抚远县| 固始县| 堆龙德庆县| 嘉荫县| 来凤县|