现在的位置: 首页 > 综合 > 正文

Memcached 学习的感想 memcache 线程模型

2013年03月06日 ⁄ 综合 ⁄ 共 598字 ⁄ 字号 评论关闭

很早就想看看memcached的源代码,比较关系其多线程处理模型、内存管理机制。由于各种原因,都没有实施。今天抽时间看了一下,主要是看了多线程模型部分。觉得有两篇博客介绍还是比较全面的,对于学习还是很有帮助的。

a:
Memcached源码分析(线程模型):
讲的比较全面,但是感觉贴的代码有点多(数据结构的代码)。

b:memcache 线程模型

总体下来觉得:

1. 基于libevent 实现事件的异步处理,性价比高(实现的复杂度和效率对比);

2. 采用线程池的工作模型,主线程负责accept, 工作线程处理连接请求;主线程和工作线程之前采用管道实现事件通知,并且通知是轮训实现的避免了惊群;

3. 每个工作线程有各自的待处理连接队列,各工作线程与主线程实现生产者消费者模型,简洁高效;

4. 连接会有缓存(还有其他),避免了内存频繁后手分配,有助性能提升,特别是对频繁的短连接效果更佳。

因为最近项目中也用到了libevent及相关的线程模型(类mysqlproxy),这里做个简单的对比:

1.  我们也是采用线程池,主线程负责accept,然后通知工作线程处理连接请求。但是我们的待处理时间队列是同一个,锁粒度会大很多!!(这个我们需要改进)

2. 相对于路由层来说,memcache只是管理一侧的连接(client到自身)相对来说比较简单,dbproxy因为要管理两侧的连接的状态,因而读写状态机处理稍微复杂一些。

 

抱歉!评论已关闭.