memcache源代码研究 - overview

线程模型

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

线程模型.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)对关联数组做不同的操作。

你可能感兴趣的:(memcache源代码研究 - overview)