Nginx 학습 노트 (3) Nginx 기본 데이터 구조
6437 단어 nginx
그러나 프로 그래 밍 언어, 예 를 들 어 C 언어 를 배 우 는 것 은 우리 가 먼저 배 운 것 도 데이터 구조 이 고 이것 은 앞으로 프로그램 을 개발 하 는 관건 이다.Nginx 를 더욱 편리 하 게 개발 하기 위해 Nginx 는 스스로 nginx 에 적합 한 데이터 구 조 를 많이 실현 했다.
Nginx 의 배열
ngx_array_s 는 Nginx 의 배열 이 고 원형 은 ngx 입 니 다.array_t。
typedef struct {
void *elts; //
ngx_uint_t nelts; //
size_t size; //
ngx_uint_t nalloc; //
ngx_pool_t *pool; //
} ngx_array_t;
이곳 의 배열 은 C 언어 에서 데이터 의 개념 을 훨씬 넘 어 Vector 와 유사 하 다.
구체 적 인 조작 은 원본 코드 를 참조 합 니 다.
Nginx 의 대기 열
ngx_queue_t 는 Nginx 의 대기 열 요소 이 고 원형 은 ngx 입 니 다.queue_s.
struct ngx_queue_s {
ngx_queue_t *prev;
ngx_queue_t *next;
};
구체 적 인 조작 은 원본 코드 를 참조 합 니 다.
Nginx 의 링크
ngx_list_t 는 Nginx 의 list 구조 입 니 다.
typedef struct {
ngx_list_part_t *last; //
ngx_list_part_t part; //
size_t size; //
ngx_uint_t nalloc; //
ngx_pool_t *pool; //
} ngx_list_t;
ngx_list_part_t 는 Nginx 의 List 요소 구조 입 니 다.
struct ngx_list_part_s {
void *elts; //
ngx_uint_t nelts; //
ngx_list_part_t *next;
};
구체 적 인 조작 은 원본 코드 를 참조 합 니 다.
Nginx 의 string -- ngxstr_t
ngx_str_t 는 Nginx 자체 가 실현 하 는 string 구조 로 c 의 문자열 과 다르다.
typedef struct {
size_t len; //
u_char *data; //
} ngx_str_t;
ngx_str_t 는 두 부분 을 포함 하고 일 부 는 문자열 의 길이 이 며 다른 일 부 는 데이터 입 니 다.메모: 이 데 이 터 는 문 자 를 가리 키 는 지침 입 니 다. 이 문자열 은 '0' 으로 끝 나 는 것 이 아니 라 길 이 를 통 해 제어 합 니 다.복사 에 사용 되 는 메모리 공간 을 줄 이기 위해 지침 을 사용 합 니 다.
다른 Nginx - String 의 조작 은 Nginx 소스 코드 를 볼 수 있 지만 매우 뚜렷 하 다.
Ngnix 의 메모리 할당 과 방출
Ngnix 에서 메모리 분배 와 방출 을 담당 하 는 구조 체 는 ngxpool_t, 그 원형 은 ngxpool_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;
};
구체 적 인 조작 은 원본 코드 를 참고 한다.
Nginx 의 Hash 표
ngx_hash_t 는 Nginx 의 hash 표 입 니 다.
typedef struct {
ngx_hash_elt_t **buckets;
ngx_uint_t size;
} ngx_hash_t;
그 중 ngxhash_elt_t 는 데이터 입 니 다.
typedef struct {
void *value; // value
u_short len; // ?
u_char name[1]; //key
} ngx_hash_elt_t;
하지만 ngxhash_t 의 실현 은 또 몇 가지 현저 한 특징 이 있다.
실제로 ngxhash_t 의 사용 은 매우 간단 합 니 다. 먼저 초기 화 한 다음 에 안에서 찾 을 수 있 습 니 다.
Nginx 의 붉 은 검 은 나무
ngx_rbtree_node_s 는 Nginx 의 붉 은 검 은 나무 노드 입 니 다.
struct ngx_rbtree_node_s {
ngx_rbtree_key_t key;
ngx_rbtree_node_t *left;
ngx_rbtree_node_t *right;
ngx_rbtree_node_t *parent;
u_char color;
u_char data;
};
ngx_rbtree_s 는 Nginx 의 붉 은 검 은 나무 입 니 다.
struct ngx_rbtree_s {
ngx_rbtree_node_t *root;
ngx_rbtree_node_t *sentinel;
ngx_rbtree_insert_pt insert;
};
구체 적 인 조작 은 원본 코드 를 참조 합 니 다.
추 가 를 기다리다.
ngx_time_t
ngx_slab_
ngx_chain_t
ngx_hash_key_arrays_t
ngx_hash_combined_t
ngx_hash_wildcard_t
ngx_buf_t
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.