memcache源代码研究 - overview

线程模型

  首先,memcache 在启动的时候会初始化一组 worker 线程,主线程接收到的请求都会转给 worker 线程去处理。需要多提一句的是,主线程与各 worker 线程之间是通过 libevent 通信的, memcache 处理各种 IO 操作都基于的 libevent。

线程模型.png
线程模型.png

处理流程

  当主线程接收到请求连接(connection)的时候,会将请求转发给 worker 线程。请求的处理流程集中在memcache.c文件里的drive_machine方法当中。drive_machine其实是一个大号的状态机,处理流程经历的状态如一下代码所示:

/**
 * Possible states of a connection.
 */
enum conn_states {
    conn_listening, 
    conn_new_cmd, 
    conn_waiting, 
    conn_read, 
    conn_parse_cmd,
    conn_write,
    conn_nread,
    conn_swallow,
    conn_closing,
    conn_mwrite,
    conn_closed,
    conn_max_state
};

  其中解析、处理请求是在conn_parse_cmd开始进行的,主要的逻辑是在process_command函数当中,里面含有对不同命令的处理函数,函数名一般叫process_xxx_command

关联数组

  memache 使用 Associative Array 来实现的缓存功能。主要的逻辑在assoc.hassoc.c代码文件中。worker 线程接到请求的时候会根据命令类型(set,get etc)对关联数组做不同的操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容