首页 > 代码库 > select和epoll学习总结
select和epoll学习总结
一、实现
Select实现
原理:
Select把要监听的文件信息拷贝到内核层。接着遍历所有监听的文件描述符对应的驱动程序的Poll函数,poll函数把当前进程挂到该设备驱动的等待队列中去,然后Poll函数会返回哪些资源可用的bitmask。如果有资源可用,则把表示哪些文件有事件的bitmask拷贝到用户空间。如果没有一个资源可用,则select会让当前进程睡眠,等有资源可用时,当前进程在资源等待队列中被唤醒,循环扫描。
过程:
- 把需要监听文件的bitmap拷贝到内核空间
- 遍历需要监听的文件的poll方法,把当前进程挂到设备的等待队列中,poll返回设备是否可读写的bitmask,并根据bitmask给res_in、res_out、res_ex赋值。
(1)此时进程并没有睡眠。
(2)设备有读写事件时会唤醒相关等待队列上的进程。
- 遍历完所有fd,如果有可读写的文件,则把处理后的fd_set拷贝到用户空间。如果没有可读写文件,则调用schedule_timeout使当前进程睡眠,等待被唤醒,唤醒后重复2、3步。
Epoll实现
二、优缺点
select和epoll学习总结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。