Nginx 학습 노트 (3) Nginx 기본 데이터 구조

6437 단어 nginx
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 의 실현 은 또 몇 가지 현저 한 특징 이 있다.
  • ngx_hash_t. 다른 hash 표 의 실현 과 달리 삭제 요 소 를 삽입 할 수 있 습 니 다. 한 번 에 초기 화 할 수 있 습 니 다. 전체 hash 표를 구성 한 후에 더 이상 삭제 할 수도 없고 요 소 를 삽입 할 수도 없습니다
  • ngx_hash_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

    좋은 웹페이지 즐겨찾기