日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

nginx之queue的具體使用

瀏覽:23日期:2023-03-13 15:37:23
目錄
  • 一、簡介
  • 二、數據結構
  • 三、相關API
    • 3.1 初始化一個隊列
    • 3.2 判斷隊列是否為空
    • 3.3 隊頭插入節點
    • 3.4 隊尾插入節點
    • 3.5 從隊列中移除某個節點
    • 3.6 將隊列從某個節點拆分成兩個隊列
    • 3.7 將兩個隊列合并成一個隊列
    • 3.8 隊列排序
    • 3.9 獲取隊列中間節點
    • 3.10 獲取原始數據

一、簡介

? nginx隊列和linux內核中的鏈表有一樣的結構,只有一個連接頭(只有兩個指針),任何包含這個結構的數據都可以連接在一起。有點像物聯網,萬物互聯,只要能上網都可以連接。

? nginx隊列是帶頭節點的一個雙向鏈表。

二、數據結構

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

三、相關API

3.1 初始化一個隊列

#define ngx_queue_init(q) \    (q)->prev = q;\    (q)->next = q

3.2 判斷隊列是否為空

只有一個頭節點,則為空。有頭節點的雙向鏈表相比無頭的雙向鏈表,各種插入、刪除等操作都更簡單。

#define ngx_queue_empty(h)\    (h == (h)->prev)

3.3 隊頭插入節點

#define ngx_queue_insert_head(h, x)   \    (x)->next = (h)->next;\    (x)->next->prev = x;  \    (x)->prev = h;\    (h)->next = x

頭部插入節點后

3.4 隊尾插入節點

#define ngx_queue_insert_tail(h, x)   \    (x)->prev = (h)->prev;\    (x)->prev->next = x;  \    (x)->next = h;\    (h)->prev = x

尾部插入節點后

3.5 從隊列中移除某個節點

#define ngx_queue_remove(x)   \    (x)->next->prev = (x)->prev;      \    (x)->prev->next = (x)->next

移除x節點后

可以看到移除節點x后,x和隊列還有一定的聯系,所以對x的操作一定要小心,不然可能將整個隊列損壞。 一般將x->prev,x->next都置空。

3.6 將隊列從某個節點拆分成兩個隊列

#define ngx_queue_split(h, q, n)      \    (n)->prev = (h)->prev;\    (n)->prev->next = n;  \    (n)->next = q;\    (h)->prev = (q)->prev;\    (h)->prev->next = h;  \    (q)->prev = n;

將隊列h從節點q拆分為h和n兩個隊列,并且q節點在n隊列中。

拆分完后

3.7 將兩個隊列合并成一個隊列

#define ngx_queue_add(h, n)   \    (h)->prev->next = (n)->next;      \    (n)->next->prev = (h)->prev;      \    (h)->prev = (n)->prev;\    (h)->prev->next = h;

合并后

3.8 隊列排序

#define ngx_queue_head(h) \    (h)->next#define ngx_queue_last(h) \    (h)->prev#define ngx_queue_sentinel(h) \    (h)#define ngx_queue_next(q) \    (q)->next#define ngx_queue_prev(q) \    (q)->prev
#define ngx_queue_insert_after ngx_queue_insert_head

使用標準的插入排序算法,通過傳遞的回調函數cmp進行比較,將整個隊列排序。

voidngx_queue_sort(ngx_queue_t *queue,    ngx_int_t (*cmp)(const ngx_queue_t *, const ngx_queue_t *)){    ngx_queue_t  *q, *prev, *next;    q = ngx_queue_head(queue);    if (q == ngx_queue_last(queue)) {return;    }    for (q = ngx_queue_next(q); q != ngx_queue_sentinel(queue); q = next) {prev = ngx_queue_prev(q);next = ngx_queue_next(q);ngx_queue_remove(q);do {    if (cmp(prev, q) <= 0) {break;    }    prev = ngx_queue_prev(prev);} while (prev != ngx_queue_sentinel(queue));ngx_queue_insert_after(prev, q);    }}

3.9 獲取隊列中間節點

通過快慢指針的方式獲取中間節點。

ngx_queue_t *ngx_queue_middle(ngx_queue_t *queue){    ngx_queue_t  *middle, *next;    middle = ngx_queue_head(queue);    if (middle == ngx_queue_last(queue)) {return middle;    }    next = ngx_queue_head(queue);    for ( ;; ) {middle = ngx_queue_next(middle);next = ngx_queue_next(next);if (next == ngx_queue_last(queue)) {    return middle;}next = ngx_queue_next(next);if (next == ngx_queue_last(queue)) {    return middle;}    }}

3.10 獲取原始數據

#define ngx_queue_data(q, type, link) \    (type *) ((u_char *) q - offsetof(type, link))

從隊列中獲取的節點類型都是ngx_queue_s,而不是實際的數據類型,需要將ngx_queue_s轉換為原始的類型。其中offsetof是一個內置的表達式,計算某個成員變量在類型中的偏移量。
通過偏移計算到計算到原始類型地址,然后進行類型強轉獲取原始類型。
比如如下調用

q = ngx_queue_last(&cache->expire_queue);file = ngx_queue_data(q, ngx_cached_open_file_t, queue);

q的地址減去offset獲取到ngx_cached_open_file_t的地址,然后在強轉為對應的類型。

到此這篇關于nginx之queue的具體使用的文章就介紹到這了,更多相關nginx queue內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: Nginx
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99久久视频| 欧美成人日韩| 91精品二区| 欧美精品二区| 午夜天堂精品久久久久| 欧美福利在线| 美女一区网站| 精品一区二区三区中文字幕在线| 亚洲深深色噜噜狠狠爱网站 | 久久av影视| 亚洲欧美在线专区| 亚洲高清激情| 捆绑调教日本一区二区三区| 精品视频黄色| 老鸭窝一区二区久久精品| 人人精品久久| 综合一区二区三区| 日韩在线卡一卡二| 自拍日韩欧美| 亚洲免费高清| 亚洲色诱最新| 午夜在线精品| 亚洲综合日本| 亚洲一区日韩| 午夜久久久久| 亚洲免费激情| 国产高清一区二区| 亚洲欧洲另类| 蜜桃一区二区三区在线观看| 野花国产精品入口| 亚洲激情不卡| 日韩午夜免费| 亚洲自拍另类| 只有精品亚洲| 日韩综合一区二区| 日韩高清在线不卡| 欧美午夜三级| 国产精品美女午夜爽爽| 国产精品亚洲二区| 欧美激情日韩| 红杏一区二区三区| 麻豆国产91在线播放| 精品中文字幕一区二区三区四区| 91欧美日韩| 99久久精品网站| 国产精品色网| 日本成人在线视频网站| 国产精品网站在线看| 精品网站aaa| 麻豆精品蜜桃| 好看的av在线不卡观看| 男女性色大片免费观看一区二区| 少妇精品久久久一区二区| 国产精品日韩精品在线播放| 国产成人精品亚洲线观看| 日韩av首页| 999精品在线| 视频一区二区三区入口| 青青国产91久久久久久| 国产精品久久久久av蜜臀| 日韩av在线播放网址| 福利一区二区三区视频在线观看| 国内自拍视频一区二区三区| 精品欧美一区二区三区在线观看| 另类av一区二区| 97精品久久| 97精品97| 日韩精品一二三四| 欧美激情一区| 九九色在线视频| 欧美精品一卡| 男女性色大片免费观看一区二区| 国产精品伦一区二区| 久久美女性网| 日本成人中文字幕| 日韩天堂在线| 在线看片一区| 日韩精品欧美大片| 国产精品igao视频网网址不卡日韩 | 国产精品115| 中文在线资源| 首页亚洲欧美制服丝腿| 久久99久久人婷婷精品综合| 国产精品99一区二区| 国产日韩一区二区三区在线播放| 欧美国产美女| 日韩三级一区| 亚洲爱爱视频| 久久国产日韩欧美精品| 日本精品不卡| 久久国产精品免费精品3p| 91精品亚洲| 国产日本精品| 免费黄色成人| 麻豆精品99| 国产亚洲网站| 国产成人精品亚洲线观看| 日韩在线a电影| 波多视频一区| 亚洲欧洲国产精品一区| 国产麻豆久久| 国产日韩中文在线中文字幕 | 亚洲女同一区| 国产一区二区三区四区五区传媒| 一区免费在线| 国产成人精品亚洲线观看| 国产+成+人+亚洲欧洲在线| 国产毛片精品| 国产videos久久| 亚洲视频综合| 日韩一区二区三免费高清在线观看 | 999精品一区| 国产欧美久久一区二区三区| 91精品国产91久久久久久黑人| 国产美女亚洲精品7777| 首页亚洲欧美制服丝腿| 999国产精品永久免费视频app| 欧美精品二区| 日韩精品视频中文字幕| 久久精品欧美一区| 免费一区二区三区在线视频| 久久亚洲不卡| 亚洲另类av| 美女久久99| 在线日韩电影| 99久久久久国产精品| 亚洲v在线看| 国产精品美女久久久| 国产一区白浆| 久久性天堂网| 亚洲乱亚洲高清| 国产精品二区影院| 日韩午夜精品| 日韩av中文字幕一区二区三区| 男女激情视频一区| 国产精品国码视频| 日韩在线看片| 亚洲一区国产一区| 国产精品免费99久久久| 美女网站一区| 麻豆视频久久| 国产视频一区二| 日韩欧美看国产| 亚洲永久字幕| 日韩综合精品| 亚州国产精品| 精品国产一区二| 欧美在线综合| 国产成人免费av一区二区午夜| 日韩免费av| 亚洲成av人片一区二区密柚| 亚洲免费婷婷| 国产精品v一区二区三区| 91麻豆精品| 蜜桃一区二区三区在线| 欧美激情日韩| 日韩免费一区| 三上悠亚国产精品一区二区三区| 日本亚洲三级在线| 久久精品国产99久久| 国产一区二区三区四区大秀| 免费在线看一区| 久久精品播放| 91精品91| 成人va天堂| av不卡免费看| 精品久久福利| 亚洲精品黄色| www.51av欧美视频| 亚洲欧美日韩专区| 吉吉日韩欧美| 国产麻豆一区二区三区| 一级欧洲+日本+国产| 久久亚洲人体| 国产精品一站二站| 99视频在线精品国自产拍免费观看| 久久国产精品色av免费看| 狠狠色综合网| 99久久九九| 成人在线视频区| 人人爱人人干婷婷丁香亚洲| 国产视频一区欧美| 久久在线视频免费观看| 国产福利91精品一区二区| 欧美日韩va| 热久久久久久| 亚洲精品欧美| 亚洲视频播放| 日韩一区二区免费看| 欧美日韩精品在线一区| 国内自拍视频一区二区三区| 国产日产高清欧美一区二区三区| 蜜芽一区二区三区| 男人操女人的视频在线观看欧美| 99久久精品国产亚洲精品| 国产精品成人a在线观看| 免费在线亚洲| 久久福利在线| 精品九九久久| 97精品一区二区|