nginx 소스 코드 분석 - 대기 열 구조 ngxqueue_t
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 (보초병) 노드 가 포함 되 어 있 으 며, 그 는 대열 의 머리 와 꼬리 를 가리킨다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.