Redis代碼剖析(1)

ACL

ACL 訪問控制列表(Access Control List)

AE

事件驅動的程序庫。

aeCreateEventLoop 創建事件循環

該函數主要初始化aeEventLoop對象,主要操作未分配內存操作。
aeEventLoop 對象主要包含以下成員:
1.aeFileEvent 已經註冊的消息事件列表
2.aeFiredEvent 已經發射的消息事件列表
3.aeTimeEvent 時間消息事件列表
4.stop 事件隊列的停止標誌

aeCreateTimeEvent 創建時間事件

aeSearchNearestTimer查找最近一個時間事件

processTimeEvents循環執行時間事件

取得當前時間,循環時間事件鏈表,如果當前時間>=預訂執行時間,則執行時間處理函數。

aeMain event處理主循環

事件處理api

aeApiCreate 創建事件
其中調用epoll_create創建一個epoll的句柄,size用來告訴內核這個監聽的數目一共有多大。
aeApiResize 修改事件循環的大小
aeApiAddEvent 追加事件
其中調用epoll_ctl epoll的事件註冊函數,追加epoll事件。
aeApiDelEvent 刪除事件句柄
aeApiDelEvent 輪詢事件
其中調用epoll_wait 監聽epoll事件發生

bio 後臺IO服務

全局對象

1.pthread_t bio_threads[BIO_NUM_OPS] 線程數組對象,pthread_t用於聲明線程ID
2.pthread_mutex_t bio_mutex[BIO_NUM_OPS] 線程互斥量數組,pthread_mutex_t使用前需要進行初始化

#include <pthread.h>
int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);

關於互斥量的使用,使用下述函數

#include <pthread.h>

int pthread_mutex_tlock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthreadd_mutex_t *mutex);

3.pthread_cond_t bio_newjob_cond[BIO_NUM_OPS] 定義條件變量數組
4.pthread_cond_t bio_step_cond[BIO_NUM_OPS] 定義條件變量數組
5.bio_jobs[BIO_NUM_OPS] 後臺IO的job
6. bio_pending[BIO_NUM_OPS] 掛起的後臺IO job

bioInit 後臺IO系統初始化

該函數循環調用pthread_create(&thread,&attr,bioProcessBackgroundJobs,arg) 線程。

bioProcessBackgroundJobs 後臺io處理線程

根據線程參數type,從bio_jobs[BIO_NUM_OPS] 取出第一個job,執行job。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章