Memcached source code analysis -- Analysis of change of state--reference

<p align="left">This article mainly introduces the process of Memcached,libevent structure of the main thread and worker thread based on the processing of the connection state of mutual conversion (not involving data access operations),the main business logic is the drive_machine. State transition process does not involve all the state,at the same time,because of his ability,some state transition may be wrong,also please predecessors. Conversion conditions: TCP,ASCII protocol. (not including conn_swallow,binary protocols will use this state)

1 Overview

First introduces the connection,connection is connected to the conn Memcached definition of their own. All state,drive_machine () is the main conversion of the state of operation:

enum conn_states { conn_listening,/**

In the Memcached.c (main),the main thread and worker thread to complete the necessary initialization,bind the corresponding libevent events,then the main thread monitor bind monitoring ports,do a good job recycling for formal. Below is the total conversion connection state graph.

2 receive connections are distributed to the worker thread

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" alt="" width="324" height="241">

  1. The main thread initialization,connecting into conn_listening state,waiting for the connection.
  2. When there is a connection,the main thread through the dispatch_conn_new () to pipeline writes characters C,connect the distributed to a worker thread worker thread connection,receive,enter the conn_new_cmd wait state.

3 data read

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6C5IhVQeo1IUZXh4uL29/a233lpZWXloro2Njffee6+zs7Onp6dQKNSUSiNO2gqpXKRCd0EqpPISVSaTAV958ODBt2Xrv//7v9vb2ycmJmpEpRcPbYVU6C7210UqpPIlVTKZfP755+/fv1++r7A6efJkf39/qVSyl8pQrrcVUrlOhe6CVEjlDSpRFI8dO/ZNdfrjH//40ksvUYPxa1shFQ9U6C5IhVQeoJqYmDh58mSV1gL685///OMf/9gWKouteAaRCt0FqZCKd6qzZ8++8MILtlgLKJFInDhx4uHDh/5rK6TihwrdBamQimuqYrH45JNP3rt372tb9cILL0xPT3/++ec1OiI8g0jVsOr2t5drURepkMo3VP39/W+//ba91vL111/fvn37ySefXFhYqNER4RlEKsxdkAqp+KUqFouPP/741tbW32qgl1566Xe/+93W1lYtjgjPIFKhuyAVUvFLJYri7373u1pYy9/+9rf5+flDhw7Jsvztt9/afkR4BpEK3QWpkIpfqvb29s8++6xUMz3++OPz8/P379+3/YjwDCIVugtSIRWnVLlcLhKJ1M5aSqXS8ePHT506Jcvy119/be8R4RlEKnQXpEIqTqnGx8d/9atfbddSly9ffv7552VZ3tzctPeI8AwiFboLUiEVp1TDw8P/+Z//WVN3+fjjjw8fPizL8vr6ur1HhGcQqdBdkAqpOKXq7+//4IMPauou+Xz+wIEDsizLsvzNN9/YeER4BpEK3QWpkIpTqmg0evXq1Zq6y/b2NiEE3OXBgwc2HhGeQaRCd0EqpOKUqqen509/+lNNraVQKDz66KPgLl9++aWNR4RnEKkalpaW5ufnl8yVyWQstl67ds1iazWRkQqp6pzqlVdeOXPmzINaamlp6fHHH19YWFhYWLh165aNR4RnEKkwd0Eqd6gMb1KiKhaLFlstHi/fNXI1dauhqqCtRkdHf/Ob39TUXebm5rq6uiB30R+7F68rpOKHCt0Fqdyhqjftqa0KhUIymfzBD37wT//0T3/961+/qplOnz792muvgbvo3dGL1xVS8UOF7oJU6C5OaNe2UhRlenp6YGCgvb2d7Ojv//7v//KXv9TOXZ577rmLFy/ivAtS1YIK3QWp0F2ckFlbzc3NDQ8Ph8Nh6ij79+/v6elJJpP5fL6vr+/s2bNf1karq6stLS3yjkrM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" alt="" width="494" height="422">

  1. Conn_new_cmd is waiting for the new connection,when the connection is written,if the current request too many,may cause starvation on other worker threads,change event type is EV_WRITE,exit.
  2. If the connection is not much,and have not read data,shows the pending command,a trip to the conn_parse_cmd,in order to continue processing the command.
  3. If the connection is not much,and is a new connection,showed no unread data,is connected into the conn_waiting state waiting for data (command).
  4. conn_waiting,Threads are waiting for subsequent data connection,if a data set to the current socket FD for reading EV_READ,ensure the following content of reading. In conn_read,call try_read_network () to read from socket FD,if no data is returned to conn_waiting,if the data is entered into the conn_parse_cmd,waiting for processing command.

The 4 command parsing

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Cfz2uaFskvwpmZmW3btk1PT9+7dy/wQ8nco9c//MM/XLhwIdo6ydzrr7a2tkjqiae510GmaWIfxyZQyci9p6envb090OKxBQcHB19//fVIrqtisbh9+/Y33njjyy+/DESqobnfaVWtW7fuvffei7bOOpt7tPAJVVtbWyT1tKy5e7L2SVdJc89kMvhmqcfisQU7Ozs//fTTqMz91VdffeGFFxzHuXv3rh8pMea+f//+3bt379+/H9cMDQ3t3r179+7dV69ehTVnzpw5c+bM8ePH+T0///zz/fv3X716FXYu+SmwPxaH2nbv3n3jxg1Yc+PGjd2r8hOeOXOGzP3OnTtnzpzxtA6et5JNg62we/fu48ePCz6lZA34Wf7rBwn5lQh59epVMncSr5Lmns/n+UlaeIuHFoScTCQXFWh6evrhhx92HCcweE+GuW/atKmrq+u9997r6uqCryKsge9nW1sbOMju3bvXrVvX1dU1NDS0bt26p5566s6dO++9915bW9umTZuGhoa6urrWrVsn+KB169ZBDeAUUOGZM2eGhoba2trA34EBYDZt2sQTHj9+fN26dW1tbS1u7mfOnGlraxsaGoKGwDX79++Hm19XV9ed8KaBVnjqqafgtAv8XVwDtiNeP0899RTuA6WAB/29ra1t9+7d8Llk7iReJc3ddV3/PFxg8dPT04yxyclJXdcjuahACwsLDzzwgOM4N2/e9COlent7e3p6esO1fft2wdawshGauz+G8qzp6uoCswAvhpXwpb2z+v3//PPPYb34G4u+gztj4IlOgYKa/Txk7ps2beLDYVgD99o7d+7cuHED7pRhTYM35jt37jz11FOC31uCGrAdS7YOXjb79+/H6wcbt3opinLo0KGDBw8eOnRord8jwXfwzTffFDQrqUq9+eabnhP+2GOPlXTCf/qnf/L7u6Io69evN03z+PHjhmFEclGBFhYWFEXp6enp6el58sknPUipQJRIFNUB8F85EMaDIPxy8ub+3nvv8eaOO5c0d95KICoE4aarV69CzA5BOv9ZWEmLm7vfQD1r4N+wpuFbQZxMK6cGjO5BSHL8+HFcg9ePp/UrOXifFEV5flURfr+Gh4cr8CxSmRoeHo6wsRRF6ejoeP7556M1d08iyKMUpIoWwzUzMyPYGlZWUZTbEen06dPr1q3zrGlra8N/wdP5hdu3b4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" alt="">

  1. After entering the conn_parse_cmd,received the order,call try_read_command () to analyze the user command,this analysis of the ASCII protocol commands,which can call process_command () to handle user command.
  2. According to the user's command,will call for different types of orders. Such as set,replace,update_command); incr (command corresponds,decr corresponds to process_arithmetic_command (gets); process_get_command (corresponding) etc.
  3. If the update type command,also need to read the updated content,enter the conn_nread state.
  4. Other types of command has to wait for the results.

The 5 command returns

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" alt="">

  1. There will be in response to a command execution,if the command only need Feedback an execution results,through the out_string () function to output the results,enter conn_write.
  2. If the get command,you need to print the contents of get,into the conn_mwrite stage.
  3. The case statement conn_write without break,so the normal print will be going to conn_mwrite.

The 6 result output

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" alt="">

  1. Conn_mwrite,call transmit () the response results are output. Transmit () to check the current state of the writing.
  2. If the data is finished,then change the state of waiting for the new command is conn_new_cmd.
  3. If not finished,then continue to wait,until finished.

7 Summary

Above is the conversion and connection status,analysis is not in place or wrong place please. In general,feel the Memcached application of libevent writes very standard,follow up with libevent,but also can learn from Memcached to a lot of knowledge.

reference from:http://www.programering.com/a/MzM3MjMwATU.html

相关文章

1. memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。 这种技术被...
add方法添加时,如果存在返回falseset方法添加时,如果存在就是覆盖,不存就是添加 1. set方法会在设置时,...
相信还是有很多项目使用memcache,可能有些人说有点out了,但是呢??? 项目上的东西不是你想换就能换...
在前边的tomcat session server msm的那篇博客我们用memcached做tomcat session服务器,默认官方memcac...
在线聊天室(onlinechatrooms)是一个共多人进行沟通交流的网络平台,随着越来越多的新技术的发明和成熟...
1.通过yum安装 复制代码代码如下:yum-yinstallmemcached#安装完成后执行:memcached-h#出现memcached帮助...