0%

IO模型

IO模型

linux中有几种IO模型,如select、poll、epoll,这几个分别是什么呢?

select模型

在select模型下是利用轮询socket句柄的方式来实现监测socket中是否有IO数据到达,每次调用select,都需要把fd集合从用户态拷贝到内核态,然后在内核态还要遍历一遍传进来的所有fd,在fd很多时开销很大

select默认支持的文件描述符是1024

poll模型

poll模型与select类似,不过其是基于链表存储的,没有最大连接数限制,但是跟select一样,需要把fd集合在用户态和内核态之间来回复制

epoll模型

epoll改进了轮询socket句柄的方式,采用notify机制来进行监测,为每个fd指定一个回调函数,当设备就绪,唤醒等待队列上的等待者,就会调用这个回调函数

欢迎关注我的其它发布渠道