成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

nginx之queue的具體使用

瀏覽:14日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
91精品国产高清一区二区三区蜜臀 | 好吊一区二区三区| 欧美日韩视频在线一区二区| 日韩国产成人精品| 美日韩精品免费| 亚洲一区二区三区国产| 亚洲国产电影| 国产精品国产三级国产专播品爱网 | 精品一区二区三区免费播放| 久久aⅴ乱码一区二区三区| 亚洲欧美日韩国产成人精品影院| 黑丝一区二区| 亚洲天堂免费在线观看视频| 亚洲精品1区2区| 一区二区三区中文在线观看| 亚洲精品一品区二品区三品区| 成人免费在线视频| 黄色精品一区| 亚洲天堂免费看| 亚洲久久一区二区| 亚洲精品中文字幕在线观看| 99国产精品| 亚洲一区影音先锋| 香蕉久久夜色精品国产| 天堂午夜影视日韩欧美一区二区| 欧美一级播放| 奇米亚洲午夜久久精品| 欧美视频在线观看一区二区| 国产一区二区在线电影| 欧美一区二区三区在线观看视频| 国产精品99久久久久| 久久这里只有精品6| 欧美精品亚洲精品| 亚洲欧洲国产专区| 亚洲裸体视频| 日韩国产一二三区| 欧美三区在线视频| 成人午夜看片网址| 欧美激情中文不卡| 亚洲精品社区| 午夜精品福利视频网站| 欧美三级日韩三级| 国产aⅴ精品一区二区三区色成熟| 26uuu久久天堂性欧美| 欧美亚洲不卡| 亚洲精品少妇30p| 久热国产精品| 国产一区二区调教| 26uuu另类欧美| 亚洲国产精品一区二区第一页| 亚洲成av人片www| 欧美午夜宅男影院| 成人黄色av电影| 1024成人网| 久久香蕉精品| 韩国午夜理伦三级不卡影院| 日韩欧美另类在线| 午夜久久福利| 亚洲一区成人在线| 91黄色小视频| 成人激情午夜影院| 国产精品成人网| 狂野欧美一区| caoporn国产精品| 亚洲丝袜精品丝袜在线| 日本精品裸体写真集在线观看 | 在线亚洲自拍| 久久精品国产亚洲aⅴ| 欧美精品一区二区三区蜜桃视频 | 亚洲影院在线观看| 欧美日韩精品一区视频| www.欧美.com| 亚洲精品网站在线观看| 欧美日韩免费高清一区色橹橹 | 亚洲v精品v日韩v欧美v专区| 91精品国产欧美一区二区| 午夜日韩av| 日韩精品电影一区亚洲| 日韩一区二区三| 一区二区在线视频观看| 九色综合国产一区二区三区| 久久久久久一二三区| 国产精品日韩欧美一区| 国产成人免费视| 亚洲品质自拍视频| 欧美日韩综合在线| 午夜精品区一区二区三| 午夜免费久久看| 日韩免费福利电影在线观看| 在线日韩欧美| 极品美女销魂一区二区三区免费 | 国产精品福利一区| 欧美日韩精品一区二区三区蜜桃 | 亚洲黄色在线| 国产一区二区免费视频| 中文字幕中文字幕中文字幕亚洲无线| 色乱码一区二区三区88| 成人国产精品免费网站| 亚洲男帅同性gay1069| 7777精品伊人久久久大香线蕉完整版 | 26uuu亚洲婷婷狠狠天堂| 国产精品一区二区欧美| 成人精品一区二区三区中文字幕 | 91香蕉视频在线| 天堂精品中文字幕在线| 久久久777精品电影网影网 | 一区在线视频观看| 国产美女娇喘av呻吟久久| 亚洲免费高清视频在线| 欧美电影免费观看完整版| 久久精品123| 91视频.com| 九九精品一区二区| 亚洲女同ⅹxx女同tv| 日韩精品一区二区在线观看| 亚洲在线观看| 你懂的国产精品| 黑人精品欧美一区二区蜜桃| 亚洲午夜在线电影| xfplay精品久久| 欧美日韩在线电影| 亚洲人人精品| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 18涩涩午夜精品.www| 日韩女优电影在线观看| 91行情网站电视在线观看高清版| 亚洲性图久久| 99久久免费国产| 卡一卡二国产精品| 一片黄亚洲嫩模| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲免费观看高清完整版在线观看 | 国产精品不卡在线观看| 日韩亚洲国产中文字幕欧美| 在线看国产一区二区| 一区二区国产日产| 欧美高清不卡| 成人亚洲一区二区一| 精品亚洲欧美一区| 午夜精品福利久久久| 中文字幕在线观看一区二区| 日韩精品在线一区| 欧美精品日韩一区| 久久久久一区二区| 国产视频一区三区| 好吊视频一区二区三区四区| 91女厕偷拍女厕偷拍高清| 国产成人av一区二区三区在线 | 337p粉嫩大胆噜噜噜噜噜91av| 欧美日韩国产系列| 色一区在线观看| 性色一区二区三区| 在线国产欧美| 午夜国产精品视频| 99vv1com这只有精品| a在线欧美一区| 成人午夜短视频| 国产99久久久国产精品潘金| 黄色资源网久久资源365| 日韩福利电影在线| 婷婷丁香久久五月婷婷| 亚洲国产一区在线观看| 怡红院av一区二区三区| 《视频一区视频二区| 中文字幕日韩欧美一区二区三区| 久久久91精品国产一区二区三区| 精品福利一二区| 91精品国产综合久久久久久| 欧美日韩国产综合一区二区| 色偷偷成人一区二区三区91 | 91免费版pro下载短视频| 91麻豆成人久久精品二区三区| 9人人澡人人爽人人精品| av午夜一区麻豆| 不卡一二三区首页| 成人精品一区二区三区四区 | 亚洲天堂网中文字| 亚洲免费观看高清完整| 一区二区三区欧美久久| 亚洲小说欧美激情另类| 午夜精品福利在线| 日韩成人精品在线| 精品一区二区在线看| 国产精品一区三区| 成人v精品蜜桃久久一区| 99久久精品99国产精品| 欧美天天在线| 一区久久精品| 国产精品一级久久久| 色婷婷综合五月| 7777精品伊人久久久大香线蕉超级流畅| 欧美日韩一二三区| 日韩亚洲欧美高清| 国产日产精品一区| 亚洲三级免费观看| 亚洲国产精品久久一线不卡| 蜜臀av性久久久久av蜜臀妖精| 国产一区二区三区国产| 成人丝袜高跟foot| 欧美精品导航|