Redis的IO多路复用-创新互联
一、linux的IO复用函数
创新互联公司长期为成百上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为潢川企业提供专业的成都网站设计、做网站,潢川网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。同一个线程内,多个描述符的IO操作,能够并发交替地顺序执行。
epoll只提供三个函数:
int epoll_create(int size); #创建epoll句柄
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
关联被监听的事件和epool句柄(可以通过op参数来增加,删除和修改关联关系)
第一个参数epfd,为epoll_create()的返回值,
第二个参数op,表示关联关系:EPOLL_CTL_ADD(增)EPOLL_CTL_MOD(改)EPOLL_CTL_DEL(删)
第三个参数fd,是需要监听的fd,
第四个参数event,告诉内核需要监听的具体事件:EPOLLIN(可读)EPOLLOUT(可写)EPOLLPRI(紧急可读)EPOLLERR(错误)EPOLLHUP(挂断)EPOLLET(触发模式ET或LT)EPOLLONESHOT(只监听一次)
此处可以设置,事件对应的回调函数。
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);
如果没有epoll_ctl中监听的事件产生,就会阻塞在这里,一直等到监听事件产生,或者等到超时。
如果有epoll_ctl中监听的事件,就执行具体的事件处理回调函数。
epoll保证了每个fd在整个过程中只会拷贝一次,从内核空间到用户空间。
二、redis的IO多路复用
redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。
事件处理器对不同的事件,进行处理。
main –> aeMain –> while { aeProcessEvents –> aeApiPoll –> epoll_wait }
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页名称:Redis的IO多路复用-创新互联
分享URL:http://scyanting.com/article/dcddsp.html