Chinaunix首页 | 论坛 | 博客
  • 博客访问: 394587
  • 博文数量: 87
  • 博客积分: 2571
  • 博客等级: 少校
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 13:10
文章分类

全部博文(87)

文章存档

2012年(49)

2011年(7)

2010年(26)

2009年(5)

分类: LINUX

2012-04-01 16:41:13

Cache.c

  1. cache_t* cache_create(const char *name, size_t bufsize, size_t align,
  2. cache_constructor_t* constructor,
  3. cache_destructor_t* destructor)
*创建一个cache对象,设置链表最大容量为64(固定)
*设置cache对象的constructor和destructor
*设置每个element的大小为bufsize
*如果为DEBUG模式,设置的bufsize,为传入参数+sizeof(uint64_t)
*初始化一个线程锁


  1. static inline void* get_object(void *ptr)
对应cache_create()中对DEBUG模式的处理
*当为DEBUG模式时,返回&(ptr+8)


  1. void cache_destroy(cache_t *cache)
*调用destructor销毁cache中所有非freecurr的对象
*释放线程锁


  1. void* cache_alloc(cache_t *cache)
*线程锁锁定
*如果还有free空间(freecurr>0),用get_object()进行分配
*如果已无free空间,新分配bufsize大小空间,存放新element
*线程锁解锁


  1. 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


  1. unsigned int slabs_clsid(const size_t size)
*返回slab的类型Id(在slabclass[]中的序号)


  1. 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()等各种清理..
阅读(946) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~