redis 为什么处理数据那么快?而且是单线程的。
这就是完全靠他的两把杀手锏:内存操作和IO多路复用。
IO多路复用:解释下多路就是多条网络连接,复用就是一条线程重复使用。
redis的io模型主要是基于epoll实现的
1. epoll 没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和系统内存关系很大 ,具体数目可以 cat /proc/sys/fs/file-max 察看。
2. 效率提升, Epoll 最大的优点就在于它只管你“活跃”的连接 ,而跟连接总数无关,因此在实际的网络环境中, Epoll 的效率就会远远高于 select 和 poll 。
3. 内存拷贝, Epoll 在这点上使用了“共享内存 ”,这个内存拷贝也省略了。
其实IO多路复用模式就是让操作系统给你监听socket套接字的变动,如果有变动就通知我们的线程,唤醒线程,线程通过线性操作,先来后到处理操作系统通知的事件集。