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

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

nginx之queue的具體使用

瀏覽:27日期: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久久,三上悠亚国产精品一区二区三区
精品亚洲a∨| 在线精品亚洲欧美日韩国产| 欧美va天堂在线| 欧美va亚洲va日韩∨a综合色| 久久久一本精品| 亚洲精品极品少妇16p| 免费日韩av片| 久久国内精品视频| 色综合狠狠操| 亚洲高清不卡| 亚洲欧洲日韩| 精品精品久久| 国产亚洲一区在线| 91精品国产自产精品男人的天堂| 在线观看视频免费一区二区三区| 国产日韩一区二区三区在线| 国产一二在线播放| 在线一区电影| 国产视频一区二| 亚洲va在线| 日韩二区三区在线观看| 国产成人精品一区二区三区视频| 日韩影院二区| 亚洲视频国产精品| 精品免费在线| 亚洲综合丁香| 精品丝袜久久| 欧美专区18| 成人午夜亚洲| 日韩中文字幕不卡| 精品一区二区三区中文字幕 | 久久九九精品| 亚洲精品一级二级三级| 激情黄产视频在线免费观看| 美女国产精品| 精品在线网站观看| 蜜桃久久久久久| 日本在线啊啊| 97久久超碰| 国产一区清纯| 久久精品国产一区二区| 国产日韩专区| 国产精品xxx| 91精品高清| 精品三级在线| 日韩黄色av| 亚洲二区精品| 精品中文在线| 日韩精品第一| 欧美天堂亚洲电影院在线观看| 国产欧美另类| 久久xxxx精品视频| 久久久久一区| 国产精品欧美在线观看| 久久成人精品| 亚洲va在线| av资源中文在线| 日韩高清不卡一区二区| 亚洲激情久久| 夜鲁夜鲁夜鲁视频在线播放| 欧美日韩精品一区二区三区在线观看| 亚洲高清影视| 久久人人88| 日本不良网站在线观看| 国产精品日韩精品在线播放| 在线精品一区二区| 99在线观看免费视频精品观看| 日本不卡免费高清视频在线| 欧美国产视频| 7m精品国产导航在线| 蜜臀91精品一区二区三区| 久久精品成人| 福利片在线一区二区| 欧美片网站免费| 日本少妇精品亚洲第一区| 天堂av在线一区| 欧美91视频| 精品一区欧美| 亚洲国产专区| 久久久久99| 99视频精品视频高清免费| 日韩中文在线电影| 日韩在线中文| 麻豆mv在线观看| 国产精品久久久久久久久妇女| 国产精品成人国产| 久久国内精品自在自线400部| 99视频精品| 欧美日韩精品在线一区| 日韩欧美少妇| 久久网站免费观看| 欧美高清不卡| 中文国产一区| 美日韩精品视频| 免费美女久久99| 国产精品日本欧美一区二区三区| 午夜欧美理论片| 影院欧美亚洲| 老色鬼久久亚洲一区二区| 久久午夜视频| 欧美一区91| 国产在线视频欧美一区| 欧美好骚综合网| 国产不卡av一区二区| 精品成人免费一区二区在线播放| 国产精品亚洲一区二区三区在线观看| 秋霞影院一区二区三区| 欧美一区二区三区高清视频| 亚洲激情婷婷| 日本v片在线高清不卡在线观看| 日韩1区2区日韩1区2区| 国产精品调教视频| 福利在线免费视频| 欧美日韩国产在线一区| 亚洲精品高潮| 国产精品**亚洲精品| 天堂√中文最新版在线| 怡红院精品视频在线观看极品| 午夜精品一区二区三区国产| 影音先锋久久精品| 欧美激情日韩| 久久久久久免费视频| 亚洲一区二区三区无吗| 国产日韩精品视频一区二区三区| 免费在线成人| 国产综合婷婷| 日韩黄色在线观看| 精品一区二区三区亚洲| 午夜久久美女| 国产精品一区毛片| 亚洲午夜一级| 国产探花一区二区| 日韩一区欧美| 亚洲欧美日韩专区| 国产精东传媒成人av电影| 久久精品一区二区不卡| 日本h片久久| 欧产日产国产精品视频| 久久先锋影音| 精品日本视频| 久久高清免费观看| 精品一区电影| 99xxxx成人网| 精品一区二区三区亚洲| 久久大逼视频| 97精品国产一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 日韩免费精品| av日韩中文| 日本91福利区| 国产精品99免费看| 国产精品15p| 免费成人在线影院| www.九色在线| 国产亚洲欧美日韩精品一区二区三区 | 国产精品1luya在线播放| 91精品婷婷色在线观看| 欧美日韩18| 狠狠久久婷婷| 国产一区丝袜| 亚洲精品人人| 久久久久久美女精品| 日本亚洲三级在线| 亚洲午夜91| 国产不卡精品| 国产毛片一区二区三区| 国产精品嫩草99av在线| 久久久久久色 | 一区在线免费观看| 国产一区二区三区精品在线观看| 在线免费观看亚洲| 神马日本精品| 狂野欧美性猛交xxxx| 美美哒免费高清在线观看视频一区二区| 国产日韩电影| 另类小说一区二区三区| 亚洲免费毛片| 亚洲一区日韩| 欧美黑人做爰爽爽爽| 日本一区二区中文字幕| 国产午夜精品一区二区三区欧美 | 亚洲二区在线| 97在线精品| 久久99久久人婷婷精品综合| 日本不卡视频在线| 中文字幕日韩欧美精品高清在线| 不卡视频在线| 99成人在线视频| 毛片在线网站| 精品国产精品国产偷麻豆 | 欧美国产另类| 日韩视频一二区| 亚洲一级淫片| 亚洲精品九九| 日韩免费精品| 日韩激情中文字幕| 日韩精品午夜视频| 涩涩涩久久久成人精品| 视频一区视频二区中文字幕| 国产日韩综合|