• redis的socket event loop


    很早之前就因为nosql就听说了redis,直到去年才真正去了解,只能说相见恨晚。

    因为数据库相关,我以为这应该是个庞然大物,万万没想到,源码不到2M,所以,我不知道该说啥了。。。

    还是来点靠谱的:

     1 /* Include the best multiplexing layer supported by this system.
     2  * The following should be ordered by performances, descending. */
     3 #ifdef HAVE_EVPORT
     4 #include "ae_evport.c"
     5 #else
     6     #ifdef HAVE_EPOLL
     7     #include "ae_epoll.c"
     8     #else
     9         #ifdef HAVE_KQUEUE
    10         #include "ae_kqueue.c"
    11         #else
    12         #include "ae_select.c"
    13         #endif
    14     #endif
    15 #endif

    按照redis作者的排位,从上到下,性能是递减的,也就是evport>epoll>kqueue>select。libevent库上面有个benchmark,可能比较权威,http://libevent.org/ (那破图我能说点什么吗)

    这个排位估计众说纷纭,对我来说,够用就好。

    下面是redis定义的事件轮询函数原型:

     1 /* Prototypes */
     2 aeEventLoop *aeCreateEventLoop(int setsize);
     3 void aeDeleteEventLoop(aeEventLoop *eventLoop);
     4 void aeStop(aeEventLoop *eventLoop);
     5 int aeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask,
     6         aeFileProc *proc, void *clientData);
     7 void aeDeleteFileEvent(aeEventLoop *eventLoop, int fd, int mask);
     8 int aeGetFileEvents(aeEventLoop *eventLoop, int fd);
     9 long long aeCreateTimeEvent(aeEventLoop *eventLoop, long long milliseconds,
    10         aeTimeProc *proc, void *clientData,
    11         aeEventFinalizerProc *finalizerProc);
    12 int aeDeleteTimeEvent(aeEventLoop *eventLoop, long long id);
    13 int aeProcessEvents(aeEventLoop *eventLoop, int flags);
    14 int aeWait(int fd, int mask, long long milliseconds);
    15 void aeMain(aeEventLoop *eventLoop);
    16 char *aeGetApiName(void);
    17 void aeSetBeforeSleepProc(aeEventLoop *eventLoop, aeBeforeSleepProc *beforesleep);
    18 int aeGetSetSize(aeEventLoop *eventLoop);
    19 int aeResizeSetSize(aeEventLoop *eventLoop, int setsize);

    看到这个让我想起了大概是2007年微软推出mvc三层架构里的数据库访问层,封装各类数据库api,来实现一个抽象统一的数据访问中间层,

    那么,在这里对不同socket IO复用实现也进行了统一的封装。或者很类似设计模式里的bridge模式。

    多的我也不说了,参考大神的博客:

    http://www.kegel.com/c10k.html

    http://pl.atyp.us/content/tech/servers.html

  • 相关阅读:
    模块之使用模块
    函数之return
    Python3入门(八)——面向对象OOP
    Python3入门(七)——模块
    Python3入门(六)——函数式编程
    Python3入门(五)——高级特性
    Python3入门(四)——Python函数
    Python3入门(三)——Python基础语法
    Python3入门(二)——Python开发工具Pycharm安装与配置
    大数据入门第二十五天——elasticsearch入门
  • 原文地址:https://www.cnblogs.com/danxi/p/6404082.html
Copyright © 2020-2023  润新知