memcached代碼閱讀(-)

 

最近想研究一下memcached實現,主要目的是熟悉和學習Linux C的開發,這個對android native開發和服務端的開發都是相通的,下面只是簡單的看了下memcached.h和memcached.c main入口函數的源碼,先把大概的理解記錄一下,還有很多細節沒有深入瞭解,慢慢來把。整個過程看的還是比較吃力的,對libc的庫函數很不瞭解。

memcached版本1.4.9

 

Memcached.h

主要定義了memcached主要的數據結構和方法。

比如幾個主要的結構定義:

1. memcached鏈接conn

2. memcached存儲結構_stritem

3. memcached的設置結構settings

4. 全局狀態stats

5. 。。。。。。

 

Memcached.c main函數代碼閱讀

main函數基本流程:

1. 判斷libevent版本,需要大於1.3

2. 截獲SIGINT信號的處理(這個爲什麼截獲,還沒有深入瞭解)

3. 初始化settings結構的一些信息,主要是memcached運行時的一些參數

4. 初始化udp處理線程數

5. 初始化sasl處理協議(對sasl不太瞭解)

6. 設置tcp和udp的端口

7. core文件的訪問的設置

8. 檢查和設置打開文件的數目

9. 用戶權限的判斷,禁止用root權限運行

10. 如果支持sasl驗證,進行響應初始化

11. 守護進程處理,忽略SIGHUP信號的處理(守護進程不處理SIGHUP?這個在確認一下)

12. 處理內存翻頁,鎖定進程內存翻頁到交換區(mlockall)

這個是爲了什麼?禁止翻頁是不是優化訪問速度?

13. 初始化libevent主線程

14. 初始化一些全局狀態(stats_init)

15. 初始化chunk(slabs_init)??

打問號,需要繼續看代碼

16. 初始化連接池conn_init

17. 忽略SIGPIPE信號,避免因爲訪問關閉管道導致進程退出

18. 初始化工作線程(thread_init)

19. 創建assoc 維護線程? assoc還沒高明白

20. 初始化時序clock_handler,這個還不太明白

21. socket初始化(需要繼續看代碼細化過程)

22. 保存進程文件save_pid

23. 開始事件循環event_base_loop

24. 一些資源清理


以後希望有時間每一條展開深入瞭解,並做筆記
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章