Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85788
  • 博文数量: 11
  • 博客积分: 1536
  • 博客等级: 上尉
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-26 22:01
文章分类

全部博文(11)

文章存档

2011年(4)

2010年(2)

2009年(3)

2008年(2)

我的朋友

分类: LINUX

2010-01-08 11:58:40

 

最近看看了memcached的源码,觉得里面的一些设计理念很不错,在此做个笔记,以便日后查看。

 

一、memcached启动流程



 

 

        memcached的注释上说取消stderr缓冲的目的是为了在daemontools等工具下运行。

    时钟时间仅仅是不停更新的一个时间变量,以避免程序不停的调用time()


二、线程模型

    主线程accept到连接之后,按顺序分配给各个线程。利用管道来通知。


三、核心函数driver_machine

        driver_machine把平常的函数调用,例如listen后,需要write;或者read后需要write之类统统通过循环和state,把他们放到一个函数里面。个人认为这样可以减少很多函数调用,即使减少了很多进栈出栈的时间。


        conn_listening:新连接事件


        conn_waiting:实际修改事件的地方


        conn_read:读数据


        conn_parse_cmd:解析命令


        conn_new_cmd:新命令


        conn_nread:继续读


        conn_swallow:继续读,并且丢弃这些数据


        conn_write:写数据


        conn_mwrite:继续写


        conn_closing:关闭


        conn中有个write_and_go,用于write之后设置conn的状态。


四、assoc(hashmap)

        assoc扩容是,并不是立刻扩容,而是让扩容的操作在另外一个线程中进行。这样做的目的可能是为了保证本次请求的及时响应吧。因为有可能本次操作导致assoc需要扩容,但有没有后续的请求了,该方式可以使得本次请求能够最快的速度返回。

阅读(2084) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~