随笔分类 -  memcached

摘要:在上一篇中已分析了memcached线程池的创建流程,由于上篇篇幅较长,因此将memcached线程池中线程的调度流程另立一篇。先让我们把目光转到主函数中,主线程在调用thread_init函数创建好线程池后,就开始创建监听套接字,memcached支持TCP,UDP,UNIX域套接字,因此相应的要创建三种监听套接字这里我们只分析TCP listening socket的创建(UDP与TCP的创建采用统一的接口),函数入口为:1 errno = 0;2 if (settings.port && server_sockets(settings.port, tcp_transp.. 阅读全文
posted @ 2012-07-10 18:54 Moon_Bird 阅读(3602) 评论(0) 推荐(1)
摘要:已经个把月没有写长篇博文了,最近抽了点时间,将memcached源码分析系列文章的线程机制篇给整出来,在分析源码的过程中参考了网上的一些资源。该文主要集中于两个问题:(1)memcached线程池是如何创建的,(2)线程池中的线程又是如何进行调度的。一切从源码中找答案。memcached的线程池模型采用较典型的Master-Worker模型:(1)主线程负责监听客户端的建立连接请求,以及accept 连接,将连接好的套接字放入连接队列;(2)调度workers空闲线程来负责处理已经建立好的连接的读写等事件。1 关键数据抽象(1)memcached单个线程结构的封装 1 //memcached线 阅读全文
posted @ 2012-07-10 16:26 Moon_Bird 阅读(8530) 评论(0) 推荐(1)
摘要:在memcached内存存储机制剖析的前两篇文章中,已分析过memcached的内存管理器初始化机制及slab的管理分配机制。接下来我们就来探讨下对象item的分配管理及LRU机制。1 item关键数据结构(1)item结构体原型typedef struct _stritem { struct _stritem *next; struct _stritem *prev; struct _stritem *h_next; /* hash chain next */ rel_time_t time; /* least recent access ... 阅读全文
posted @ 2012-05-21 16:09 Moon_Bird 阅读(3258) 评论(2) 推荐(4)
摘要:在上一节中已经分析了memcached的内存分配管理初始化机制,在这节中我们将详细分析memcached中slab的管理与分配机制。slabclass[MAX_NUMBER_OF_SLAB_CLASSES]数组是slab管理器(类型见上节),是memcached内存管理的核心数据结构,起着非常重要的作用。slabclass[i]的内存示意图如下图所示:(1) size和perslab保存着每个slab分配的chunk的大小,及可分配的chunk数。(2) slablist是一个二维指针,指向一个指针列表,列表的长度为list_size * sizeof(void*),列表中的一项指向一个sla 阅读全文
posted @ 2012-05-16 16:14 Moon_Bird 阅读(1128) 评论(0) 推荐(1)
摘要:一 内存分配管理机制 memcached是一个高性能的,分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。memcached有一个很有特色的内存管理方式,为了提高效率,默认情况下采用了名为Slab Allocator的机制分配管理内存空间。 memcached文档中关于slab allocator有这么一段话: the primary goal of the slabs subsystem in memcached was to eliminate memory fragmentation issues totally by using fixed-size memory ch 阅读全文
posted @ 2012-05-14 14:48 Moon_Bird 阅读(3810) 评论(0) 推荐(1)