Cache.c
- cache_t* cache_create(const char *name, size_t bufsize, size_t align,
- cache_constructor_t* constructor,
- cache_destructor_t* destructor)
*创建一个cache对象,设置链表最大容量为64(固定)
*设置cache对象的constructor和destructor
*设置每个element的大小为bufsize
*如果为DEBUG模式,设置的bufsize,为传入参数+sizeof(uint64_t)
*初始化一个线程锁
- static inline void* get_object(void *ptr)
对应cache_create()中对DEBUG模式的处理
*当为DEBUG模式时,返回&(ptr+8)
- void cache_destroy(cache_t *cache)
*调用destructor销毁cache中所有非freecurr的对象
*释放线程锁
- void* cache_alloc(cache_t *cache)
*线程锁锁定
*如果还有free空间(freecurr>0),用get_object()进行分配
*如果已无free空间,新分配bufsize大小空间,存放新element
*线程锁解锁
- void cache_free(cache_t *cache, void *ptr)
*线程锁锁定
*(这段没看明白意图,留空)
*线程锁解锁
Slabs.h
*初始化slabclass[MAX_NUMBER_OF_SLAB_CLASSES],设置最大slab的类型数(MAX_NUMBER_OF_SLAB_CLASSES=200)
*初始化线程锁slabs_lock
- unsigned int slabs_clsid(const size_t size)
*返回slab的类型Id(在slabclass[]中的序号)
- void slabs_init(const size_t limit, const double factor, const bool prealloc)
Memcached.c
main.c
-->signal():截获SIGINT
-->settings_init():对全局变量settings进行初始化
-->setbuf():关闭stderr的缓冲
-->解析argv:根据启动参数,设置settings/其他参数(端口、协议、资源上限、Sasl服务--验证用
)
-->event_init():
-->stats_init():memcached状态初始化(基本上都初始化为0)
-->assoc_init():hash相关初始化
-->conn_init():连接数初始化(最大200)
-->slabs_init():slab块初始化
-->thread_init():工作线程初始化(settings.num_threads)+对应事件(main_base)
-->start_assoc_maintenance_thread():启动管理线程
-->server_socket_unix():创建UNIX socket(其中有些细节没太看懂)
-->根据配置开启tcp或udp监听:
-->usleep(1000):很保守的给予socket一个准备时间
-->save_pid():防止重复启动?
-->drop_privileges():放弃一些不需要的权限
-->event_base_loop():进入事件循环**(main_base)
-->stop_assoc_maintenance_thread():开始清理
-->remove_pidfile()等各种清理..
阅读(974) | 评论(0) | 转发(0) |