본문 바로가기

Programing/OpenSource

[Redis] 난 Redis가 Ruby로 짰는 줄 알았는데...

난 Redis가 Ruby로 짰는 줄 알았는데...

코드를 받아보니 C로 짜여져 있다.

 

server.h를 보면 ae.h를 포함하고 있다.

Jim's event-loop 를 위해 만든 event-driven 프로그래밍 라이브러리를 재사용하기 편하게 라이브러리화 한 것이다.

ae.c에 보면 시스템에서 지원하는 최적(최고)의 멀티플렉싱 레이어를 포함하는 코드가 있는데,

evport -> epoll -> kqueue -> select 순으로 되어 있다.

#ifdef HAVE_EVPORT
#include "ae_evport.c"
#else
    #ifdef HAVE_EPOLL
    #include "ae_epoll.c"
    #else
        #ifdef HAVE_KQUEUE
        #include "ae_kqueue.c"
        #else
        #include "ae_select.c"
        #endif
    #endif
#endif

evport는 일루모스(illumos) 이벤트 포트를 위한 모듈이고 copyright는 Joyent로 되어있다.

 

예전에 썼던 node.js의 윈도우 지원의 역사에 예전의 그림이 있는데 최근의 그림은 아래와 같을 것이다.(추측)

libev가 epoll이나 kqueue를 선택하도록 추상화하는 레이어라 할 수 있다.