Twemproxy内部定义了若干种数据结构,如概述中所述,包括自定义的数据结构和关键数据结构,本章将讲述两种数据结构,为后面的复杂的逻辑分析扫清障碍。
- 自定义的数据类型: nc_array.c、nc_array.h、nc_string.c、nc_string.h
- 关键数据结构和算法: nc_rbtree.h、nc_rbtree.c、nc_queue.h、nc_request.c、nc_response.c、nc_mbuf.c、 nc_mbuf.h、nc_message.c、nc_message.h、nc_server.c、nc_server.h
(1) 数组(nc_array)
数组是一个很常见的数据存储方式,其特点比如连续存储、随机访问等在此就不累述,这里只讲解在NC中的实现。
NC的array实现需要熟练操作指针,基本所有的数组操作都是内存指针的操作。根据元素个数和元素大小申请一块连续的内存,像array_idx获取元素index、array_get获取指定index处的元素、array_top等操作比较简单,array_push需要考虑数组已经满了的情况,如果出现这种情况,为了减少内存分配和释放的次数,NC会重新申请当前数组长度两倍的内存,然后才能将新元素放入数组。
还有一点,nc_array实际上是一个栈的操作,只能在array的尾部执行添加(push)和删除(pop)操作,但是查看元素不限位置,只需知道元素的index就可查看该index上的元素。
(2) 字符串&#