Memcached 学习的感想

本文分析了memcached的线程模型与内存管理机制,强调其基于libevent的事件处理方式,采用线程池的工作模式,以及通过管道实现事件通知等特性。并与作者项目中的libevent使用情况进行了对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

b:memcache 线程模型

总体下来觉得:

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

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

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

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

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值