nginx 소스 코드 분석 - 대기 열 구조 ngxqueue_t

1369 단어
대기 열 구현 파일: 파일:. / src / core / ngxqueue.h/.c
ngx_queue_t 용기 의 장점 은:
정렬 기능 을 실현 하 였 다
이것 은 매우 경량급 으로 순수한 양 방향 링크 입 니 다. 링크 요소 가 차지 하 는 메모리 분 배 를 책임 지지 않 고 Nginx 와 봉 인 된 ngx 입 니 다.pool_t 메모리 풀 은 전혀 무관 합 니 다.
두 링크 간 의 합병 을 지원 합 니 다.
1. 기본 데이터 구조
typedef struct ngx_queue_s  ngx_queue_t;

struct ngx_queue_s {
    ngx_queue_t  *prev;
    ngx_queue_t  *next;
};

그 중에서 sizeof (ngx queue t) = 8.
대기 열 구조 정 의 를 통 해 알 수 있 듯 이 nginx 의 대기 열 구조 에는 노드 의 데이터 내용 이 없습니다.
2. 기본 조작
/*
 * find the middle queue element if the queue has odd number of elements
 * or the first element of the queue's second part otherwise
 */

ngx_queue_t *
ngx_queue_middle(ngx_queue_t *queue)
/* the stable insertion sort */
void ngx_queue_sort(ngx_queue_t *queue,
    ngx_int_t (*cmp)(const ngx_queue_t *, const ngx_queue_t *))

nginx 의 대기 열 작업 과 구 조 는 36826 줄 포인터 만 작 동 하고 노드 내용 공간의 배분 과 저장 을 책임 지지 않 기 때문에 자신의 대기 열 노드 를 정의 할 때 데이터 구조 와 분배 공간 을 스스로 정의 하고 ngx 를 포함 해 야 합 니 다.queue_t 형식의 구성원, 원본 데이터 노드 를 얻 으 려 면 ngx 를 사용 해 야 합 니 다.queue_data 매크로:
#define ngx_queue_data(q, type,link)\
(type *) ((u_char *) q - offsetof(type, link))

또한, 전체 quue 구조 에는 sentinel (보초병) 노드 가 포함 되 어 있 으 며, 그 는 대열 의 머리 와 꼬리 를 가리킨다.

좋은 웹페이지 즐겨찾기