#1 流程圖
1 當進入到conn_read狀態後,會呼叫try_read_network(),將socket資料讀取到conn的rbuf中。
例如:char *rbuf = 『set key 0 0 4\r\nget name\r\n』。
2 然後進入到conn_parse_cmd狀態,呼叫try_read_command()方法
3 當前指標char *rcurr = rbuf。位址指到了字元開始的位址。
4 el = memchr(c->rcurr, 『\n』, c->rbytes)查詢第乙個\n的位置
5 沒有找到\n,conn_waiting,讀取更多的資料
6 找到的位置為el; 判斷el前乙個字元是否有\r。如果有\r,將\r替換成\0。沒有則\n替換\0
(下乙個命令rcurr = el +1開始,即:get name\r\n)
char *rbuf = 『set key 0 0 4\0\nget name\r\n』
7 呼叫process_command()函式。char *command = 『set key 0 0 4\0』;
8 呼叫tokenize_command()函式。
char *command = 『set key 0 0 4\0』;依次找空格,將每個token存到陣列。
tokens[0].value = 『set』
tokens[0].length= 3
tokens[1].value = 『key』
tokens[1].length= 3
tokens[2].value = 『0』
tokens[2].length= 1
tokens[3].value = 『0』
tokens[3].length= 1
tokens[4].value = 『4』
tokens[4].length= 1
9 根據tokens陣列的大小ntokens以及tokens[0].value來呼叫不同的命令。預設tokens[0]表示memcached命令。
Memcached原始碼分析之資源分享
facebook對memcached的提公升 memcached原始碼分析之記憶體管理篇 the time is passing iteye技術 memcached原始碼分析之記憶體管理篇之item結構圖及slab結構圖 yxnyxnyxnyxnyxn的專欄 關於memcache記憶體管理模型的理解...
Memcached原始碼解析
memcached是乙個非常有名的高效能分布式快取系統,採用memcached作為快取系統能顯著提高系統的效能。想要更好地發揮對memcached的效能,對其源 進行分析顯得非常必要。本文基於memcached 1.4.15進行源 分析,假設讀者對socket,管道,多執行緒程式設計,hash演算法...
Memcached原始碼分析之網路模型篇
memcached 採用多執行緒的工作方式,主線程接收連線,然後把連線平攤給 工作執行緒,工作執行緒處理業務邏輯,memcached 使用 libevent 處理網路 事件,主線程和工作執行緒都有乙個 event base,這是 libevent 的核心資料 結構,event base 能夠監聽多個...