免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1553 | 回复: 0
打印 上一主题 下一主题

memcache源码阅读心得 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-08 11:58 |只看该作者 |倒序浏览


最近看看了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需要扩容,但有没有后续的请求了,该方式可以使得本次请求能够最快的速度返回。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/60481/showart_2143729.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP