src/core/ngx_queue.{c|h}實現(xiàn)了一個隊列的操作邏輯,隊列的基本結(jié)構(gòu)為一個雙向隊列
基礎數(shù)據(jù)結(jié)構(gòu)為:
[cpp]?view plaincopyprint?
根據(jù)數(shù)據(jù)結(jié)構(gòu)可以發(fā)現(xiàn),nginx的隊列操作和結(jié)構(gòu)只進行指針操作,不負責節(jié)點內(nèi)容空間的分配和保存,所以在定義自己的隊列節(jié)點的時候,需要自己定義數(shù)據(jù)結(jié)構(gòu)以及分配空間,并包含一個ngx_queue_t類型的成員,需要獲得原始的數(shù)據(jù)節(jié)點的時候,需要使用ngx_queue_data宏:
[cpp]?view plaincopyprint?
另外,整個queue結(jié)構(gòu)中包含一個sentinel哨兵節(jié)點,他指向隊列的頭和尾。
看了下queue的源碼發(fā)現(xiàn)實現(xiàn)部分只有兩個方法:
[cpp]?view plaincopyprint?
ngx_queue_init初始化隊列
ngx_queue_empty清空節(jié)點中在某一個節(jié)點之前的所有節(jié)點
ngx_queue_insert_head插入一個節(jié)點在指定節(jié)點之后
ngx_queue_insert_after插入一個節(jié)點在指定節(jié)點之后
ngx_queue_insert_tail?插入一個節(jié)點在指定節(jié)點之前
ngx_queue_head?得到節(jié)點的下一個節(jié)點
ngx_queue_next?得到節(jié)點的下一個節(jié)點
ngx_queue_last?得到節(jié)點的上一個節(jié)點
ngx_queue_prev?得到節(jié)點的上一個節(jié)點
ngx_queue_sentinel?得到當前的節(jié)點
ngx_queue_remove?刪除隊列中的某一個節(jié)點
ngx_queue_data?得到隊列某一節(jié)點的數(shù)據(jù)
ngx_queue_split
ngx_queue_add
ngx_queue_middle
ngx_queue_sort
以上就介紹了nginx 源碼學習筆記(九)——基本容器——queue,包括了隊列,插入排序方面的內(nèi)容,希望對PHP教程有興趣的朋友有所幫助。
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號