关于nginx的常用基本数据结构有:
字符串: ngx_str_t,使用nginx特有的字符串拷贝时,较少内存拷贝
链表:ngx_list_t,优点在于链表存储的元素可以是任何数据结构,占用的内存有链表本身管理,通过数组分配。使用数组通过偏移量来直接访问,提高小块内存的访问效率。
链表中的元素:ngx_list_part_t
键值对:ngx_table_elt_t,为http的header量身定制
buffer:ngx_buf_t,减少内存拷贝
以ngx_buf_t为元素的链表ngx_chain_t
另外nginx还有6种高级的数据结构:
双向链表:ngx_queue_t ,ngx_queue_t只是把这些已经分配好内存的元素用双向链表连接起来。
动态数组: ngx_arrary_t,ngx_array_t可以在达到容量最大值时自动扩容(是不是应该跟go的slice做个对比?)
单向链表:ngx_list_t,会负责容器内元素内存分配的,但是不保证内存连续
红黑树: ngx_rbtree_t,ngx_rbtree_t容器在检索、插入、删除元素方面非常高效,且其针对各种类型的数据的平均时间都很优异。与散列表相比,ngx_rbtree_t还支持范围查询,也支持高效地遍历所有元素
基数树: ngx_radix_tree_t,由于ngx_radix_tree_t基数树在插入、删除元素时不需要做旋转操作,因此它的插入、删除效率一般要比ngx_rbtree_t红黑树高。
网友评论