Redis中的I/O多路复用实现
< 返回列表时间: 2019-10-06来源:OSCHINA
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>>
说明: 最有可能成为瓶颈的是网络带宽,接下去是内存,最后才是CPU; Redis服务器是一个事件驱动程序; Redis服务器通过套接字(SOCKET)和客户端(或者其他Redis服务器)进行连接; 套接字和客户端的通信产生一些操作,这些操作对应的产生文件事件; Redis服务器有专门的服务程序(多路复用程序)去监听对应的套接字来完成客户端的网络请求操作; 这里的多路服务程序中的多路是指多个网络请求、多个套接字,处理这些网络请求实际操作的程序线程只有一个,但是不影响请求的接受,可以同时接受多个请求,但是某一时刻实际在处理的任务,只有一个; 如果一个操作卡住了,后续的也会卡住,怎么办?答案: k-v操作 ,卡住的几率几乎没有 ; Redis基于Reactor模式开发了自己的网络事件处理器,这个处理器使用了I /O多路复用技术 ,多路复用程序同时监听多个套接字(套接字产生并发时,I/O多路复用程序会将这些套接字放到一个队列中,顺序、同步的往下传递),并根据套接字目前的任务,通过事件分派器,为该套接字关联一组事件处理器(事件处理器有两种:文件事件、时间事件,针对客户端请求,只有文件事件),一个套接字可能会产生多个文件事件,这些事件是关联的;当一个套接字产生的事件被处理完成之后,I/O多路复用程序才会继续向文件事件分派器传送下一个套接字;这些事件处理器是一个个函数,他们定义了事件发生时,服务器应该执行的动作; Redis的多路复用程序的所有功能,都是通过包装select、epoll、evport、kqueue这些I/O多路复用库实现的,Redis在每个函数库上面包装了一层,实现了相同的API,所以,可以任意选择一个库,而不做其他修改;库的选择,是在编译时,自动选择系统性能最高的I/O多路复用函数库来作为Redis的多路复用底层实现; 文件事件处理器的组成和流程

热门排行