操作系统多路复用IO底层函数理解

linux操作系统在对IO的操作,实际上是对每个物理设备对应文件的操作,对应到操作系统里是文件操作符,即(File Describe)FD,文件描述符包含了操作文件的位置、内容等信息;用户的io请求连接首先会注册到多路复用器,多路复用器通过指定函数轮训,直到连接有IO操作,才会开启线程操作IO

1、select函数

select函数实现通过bitmap数组存储文件描述符,受操作系统限制32位最大支持1024,64为最大支持2048,所以如果使用select函数,则io操作最大并发只能是1024或者2048;

 select函数实现多路复用是阻塞用户进程,线性轮训fd数组,当fd数组很大是,效率线性降低

2、poll

 基于链表存储FD,解决了select函数fd数量限制;其他和select函数没什么区别

3、epoll

 基于事件回调机制,标记哪些FD进入就绪状态,内核采用callback的回调机制激活FD,效率提升,不用轮训无用的FD

没有最大并发限制,具体和内存、硬件有关系

 当连接较少的情况下效率和select、poll无太大区别,遇到大量的连接的时候,效率远高于select和poll

 

 

 

posted @ 2020-12-28 17:09  blissnmx  阅读(58)  评论(0)    收藏  举报