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。