redis专题1:redis 高性能的原理-宏观层面

基于四点

1.内存操作,避免了磁盘io

2.单线程处理网络请求,避免线程切换和竞争

3.多路I/O复用

4.Redis直接自己构建了VM 机制 ,一般的系统调用系统函数的话,会浪费一定的时间去移动和请求

主要说一个I/O模型

多路I/O复用具体的原理见原文链接https://blog.csdn.net/wxy941011/article/details/80274233

依赖的是epoll IO多路复用模型

epoll create的时候会建立一个evevtpoll对象,具体就是一个红黑树,一个双向链表,核心就是这两个数据结构。

epoll_ctl时,如果增加socket句柄,则检查在红黑树中是否存在,存在立即返回,不存在则添加到树干上,然后向内核注册回调函数,如果这个句柄的中断到了,就把它放到准备就绪list链表里。(比较selector模式,每次只需要去就绪链表中处理事件即可,不需要轮询整个集合)

epoll_wait时立刻返回准备就绪链表里的数据即可。

       1. epoll 没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和系统内存关系很大  ,具体数目可以 cat /proc/sys/fs/file-max 察看。

  2. 效率提升, Epoll 最大的优点就在于它只管你“活跃”的连接 ,而跟连接总数无关,因此在实际的网络环境中, Epoll 的效率就会远远高于 select 和 poll 。

  3. 内存拷贝, Epoll 在这点上使用了“共享内存 ”,这个内存拷贝也省略了,selector/poll模式需要把fd集合从用户态拷贝到内核态,去检查是否有事件发生

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容