完結(jié)拉勾300分鐘吃透分布式緩存課件版轉(zhuǎn)載_第1頁
完結(jié)拉勾300分鐘吃透分布式緩存課件版轉(zhuǎn)載_第2頁
完結(jié)拉勾300分鐘吃透分布式緩存課件版轉(zhuǎn)載_第3頁
完結(jié)拉勾300分鐘吃透分布式緩存課件版轉(zhuǎn)載_第4頁
完結(jié)拉勾300分鐘吃透分布式緩存課件版轉(zhuǎn)載_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

課時1Memcached網(wǎng)絡(luò)模型課時9互聯(lián)網(wǎng)人實戰(zhàn)大學(xué)線程狀態(tài)機(jī)狀態(tài)事件Mc命令處理01.基于Libevent的多線程網(wǎng)絡(luò)模型02.主線程接受建立連接03.工作線程讀取網(wǎng)絡(luò)IO處理并響應(yīng)網(wǎng)絡(luò)模型網(wǎng)絡(luò)模型主線程監(jiān)聽端口接受請求并調(diào)度給工作線程處理邏輯狀態(tài)機(jī)(drive_machine)連接調(diào)度機(jī)制新連接存入新連接隊列pipe通知worker線程Worker線程從隊列取一個連接并開始網(wǎng)絡(luò)IO網(wǎng)絡(luò)模型工作線程監(jiān)聽主線程pipe通知從隊列獲取新連接,創(chuàng)建conn注冊讀寫事件并監(jiān)聽讀取用戶cmd,解析處理,返回rsp處理邏輯狀態(tài)機(jī)(drive_machine)共享主線程工作線程狀態(tài)機(jī)實現(xiàn)機(jī)制:switch-cases網(wǎng)絡(luò)模型狀態(tài)機(jī)主線程狀態(tài)機(jī)處理conn_listening狀態(tài)Accept新連接調(diào)度新連接給工作線程狀態(tài)機(jī)初始o(jì)r重置狀態(tài)注冊讀事件讀取網(wǎng)絡(luò)數(shù)據(jù)命令解析及處理對寫指令繼續(xù)讀取命令處理完畢寫響應(yīng)到連接緩沖寫給client重置狀態(tài)進(jìn)入新循環(huán)工作線程狀態(tài)機(jī)狀態(tài)機(jī)conn_new_cmd進(jìn)入條件:Mainthread調(diào)用dispatch_conn_new的時候,worker線程創(chuàng)建conn對象,初始狀態(tài)為conn_new_cmd,命令處理完畢,準(zhǔn)備接受新指令,也會進(jìn)入conn_new_cmd處理:調(diào)用reset_cmd_handler,重置conn的cmd和substate,并在必要時對連接buffer進(jìn)行收縮狀態(tài)跳轉(zhuǎn):如果是第一次事件觸發(fā)狀態(tài)會進(jìn)入conn_waiting狀態(tài)如果讀緩存區(qū)中有數(shù)據(jù),會進(jìn)入conn_parse_cmd狀態(tài)。conn_waiting狀態(tài)機(jī)conn_read處理流程通過update_event注冊讀事件然后將狀態(tài)變成conn_read進(jìn)入條件監(jiān)聽到網(wǎng)絡(luò)數(shù)據(jù)進(jìn)來,進(jìn)入conn_read狀態(tài)處理通過try_read_network從socket中讀取數(shù)據(jù)狀態(tài)跳轉(zhuǎn)讀取正常進(jìn)入conn_parse_cmd狀態(tài),準(zhǔn)備解析cmd讀取失敗進(jìn)入conn_closing,關(guān)閉連接處理:通過mand讀取rbuf,通過\n來分隔數(shù)據(jù)報文的命令如果命令首行長度大于1024(key長度要小于1024),關(guān)閉連接在mand對首行指令,繼續(xù)按照空格分拆報文確定命令類型,分派給mand處理狀態(tài)機(jī)conn_parse_cmd狀態(tài)機(jī)狀態(tài)跳轉(zhuǎn):rbuf還沒讀到\n,跳轉(zhuǎn)到conn_waiting,繼續(xù)等待客戶端的命令數(shù)據(jù)報文;對于get等指令,處理完畢后跳轉(zhuǎn)到conn_mwrite;對于set/put等指令,需要繼續(xù)讀取val數(shù)據(jù),跳轉(zhuǎn)到conn_nread;處理失敗,跳轉(zhuǎn)到conn_closing關(guān)閉連接狀態(tài)機(jī)conn_parse_cmd處理:從conn繼續(xù)讀取value數(shù)據(jù);讀取完畢后,調(diào)用complete_nread,進(jìn)行數(shù)據(jù)存儲處理;數(shù)據(jù)處理完畢后,向conn的wbuf寫結(jié)果數(shù)據(jù);狀態(tài)跳轉(zhuǎn):處理完畢后,狀態(tài)設(shè)為conn_write狀態(tài)機(jī)conn_nread處理:如果conn的iovused為0或UDP,將wcurr寫入conn消息緩沖狀態(tài)跳轉(zhuǎn):直接進(jìn)入conn_mwrite狀態(tài)機(jī)conn_write處理:通過transmit來向客戶端寫數(shù)據(jù)狀態(tài)跳轉(zhuǎn)寫數(shù)據(jù)成功,跳轉(zhuǎn)到conn_new_cmd,準(zhǔn)備新指令的獲取寫數(shù)據(jù)失敗,跳轉(zhuǎn)到conn_closing,關(guān)閉連接退出狀態(tài)機(jī)狀態(tài)機(jī)conn_mwriteconn_closing處理:關(guān)閉連接,game

over命令讀取處理及響應(yīng)listen新連接進(jìn)入連接重置及內(nèi)存收縮準(zhǔn)備IO讀取讀取網(wǎng)絡(luò)數(shù)據(jù)解析指令讀取value數(shù)據(jù)key/value變更發(fā)送給響應(yīng)給client構(gòu)建響應(yīng)循環(huán)等待下次處理查詢valueread指令NY處理流程主線程監(jiān)聽并接受新連接接入Worker線程初始化連接并等待IO有數(shù)據(jù)到來時,讀取網(wǎng)絡(luò)數(shù)據(jù)根據(jù)Mc協(xié)議解析指令對變更指令,需要進(jìn)一步讀取value,并進(jìn)行變更對于讀取指令,查詢

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論