当前位置: 首页> 教育> 培训 > IO多路复用的Linux内核原理

IO多路复用的Linux内核原理

时间:2025/7/9 6:54:47来源:https://blog.csdn.net/weixin_62264287/article/details/142103443 浏览次数:0次

IO多路复用

IO 多路复用是一种同步IO模型,一个线程可以监视多个文件句柄,一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作,没有文件句柄就绪就会阻塞应用程序交出CPU

无需为每个IO操作创建一个线程或进程,没有线程切换的开销

Select

传入需要监听的文件描述符集合,每次select都需要重新初始化一下,因为fd_set会被置位,然后调用select的时候用户态切换到内核态,集合会被拷贝一次,内核会遍历所有的文件描述符看看有没有状态改变的,没有的话会陷入睡眠等待超时时间再次遍历,找到的话会将集合拷贝回用户

fd_set是1024bit组成的位图,由16个long  int数组模拟的

内核需要遍历文件描述符

每次初始化fd_set

多次拷贝文件集合

Poll

需要根据监听的文件和事件构造poll数组,然后调用poll拷贝数组传到内核构造poll链表,内核也是遍历链表看看有没有就绪的socket,没有的话就等待事件唤醒或者超时返回,有的话就将链表节点拷贝回用户数组

监听的socket数量没有数据结构的限制

不需要每次构造数组,但每次都需要传入数组

多次拷贝

Epoll

内核通过红黑树来管理监听的文件描述符,不需要每次都拷贝,只用添加一次就行,当监听的socket有事件发生时会被添加到就绪链表中,将就绪链表里面的事件拷贝回用户态数组,没有的话就睡眠等待事件唤醒或者超时退出

减少了用户态到内核态的数据拷贝

用户进程不需要遍历所有的socket

关键字:IO多路复用的Linux内核原理

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: