1.memcached参数解读
"p:" /* TCP port number to listen on */
这是监听套接字所绑定的端口号,对应的变量是settings.port;
"U:" /* UDP port number to listen on */
UDP套接口所绑定的端口号,对应的变量是settings.udpport;
进程会创建两种类型的套接字用于服务。其实还有UNIX域SOCKET,本文忽略之。
"m:" /* max memory to use for items in megabytes */
进程缓存了用户请求的数据项(K-V对),因此需要占用内存,这里指定所能占用内存的最大值,
当数据项增多而达到内存限制值,将会淘汰一些旧的数据项;
默认值是64MB
"M" /* return error on memory exhausted */
指定一种行为,当请求数据项而发生内存分配失败(不是malloc失败,是达到了内存限制峰值),采取两种策略之一:
返回错误;或者,淘汰旧的数据项而满足请求。
"c:" /* max simultaneous connections */
默认值1024,最大并发连接数
"f:" /* factor? */
默认值1.25. 这是SLAB所分配内存单元大小的系数,比如第一个SLAB分配32字节固定大小的数据项,则第二个SLAB分配32 * 1.25字节的数据项
"t:" /* threads */
工作者线程数目
"D:" /* prefix delimiter? */
分隔符,默认使用冒号来分隔KEY PREFIX + ID
"R:" /* max requests per event */
每条连接每次所能处理的最大请求个数,这是为了避免“饿死”其它连接
"b:" /* backlog queue limit */
这是listen的第二个参数
"B:" /* Binding protocol */
所使用的协议:ASCII,二进制,或者是自定义(AUTO)默认。
I:" /* Max item size */
数据项的最大尺寸,默认为1MB,最小1KB,最大128MB
2.MEMCACHE启动流程
首先,创建reactor,亦即epoll描述符之类的东西
性能数据统计相关初始化;
哈希表初始化;
连接对象池初始化;
SLAB缓存初始化;
启动工作者线程
每个工作者线程拥有自己的独立EPOLL描述符,或者说,拥有独立的reactor。
启动哈希表迁移线程
创建主服务监听套接字,非阻塞
之后主线程进入监听循环,不断ACCEPT,将新连接按照ROUND_ROBIN算法分配给工作者线程
先到这里,下回继续。