| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Redis的IO多路复用机制 -> 正文阅读 |
|
[大数据]Redis的IO多路复用机制 |
?文件事件处理器的四个部分:套接字、I/O多路复用程序、文件事件分发器、事件处理器 套接字socket
I/O多路复用程序
Redis的I/O模型主要是基于epoll实现的,不过也提供了select和kquque的实现,默认是采用epoll 一个客户端连接后,将这个文件描述符(connfd)放到一个数组里。 selectselect 是操作系统提供的系统调用函数,select 只能监听 1024 个文件描述符,通过它,我们可以把一个文件描述符的数组发给操作系统, 让操作系统去遍历,确定哪个文件描述符可以读写, 然后告诉我们去处理,不过,当 select 函数返回后,用户依然需要遍历刚刚提交给操作系统的 list。 只不过,操作系统会将准备就绪的文件描述符做上标识,用户层将不会再有无意义的系统调用开销。 poll它和 select 的主要区别就是,去掉了 select 只能监听 1024 个文件描述符的限制。 epollepoll 是最终的大 boss,它解决了 select 和 poll 的一些问题。 所以 epoll 主要就是针对这三点进行了改进。 1. 内核中保存一份文件描述符集合,无需用户每次都重新传入,只需告诉内核修改的部分即可。 2. 内核不再通过轮询的方式找到就绪的文件描述符,而是通过异步 IO 事件唤醒。 3. 内核仅会将有 IO 事件的文件描述符返回给用户,用户也无需遍历整个文件描述符集合。 具体,操作系统提供了这三个函数。 第一步,创建一个 epoll 句柄
?第二步,向内核添加、修改或删除要监控的文件描述符。
第三步,类似发起了 select() 调用
文件事件分发器
事件处理器
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 3:39:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |