bio
同步阻塞1/0,线程发起I0请求后,一直阻塞,直到缓冲区数据就绪后,再进入下一步操作
nio
同步非阻塞I0,线程发起I0请求后,不需要阻塞,立即返回。用户线程不原地等待10缓冲区,可以先做一些其他操作,只需要定时轮询检查I0缓冲区数据是否就绪即可。
aio
异步非阻塞I/0型。线程发起I0请求后,不需要阻塞,立即返回,也不需要定时轮询检查结果,异步10操作之后会回调通知调用方
io多路复用
指利用单个线程来同时监听多个Socket,并在某个Socket可读、可写时得到通知,从而避免无效的等待,目前的I/O多路复用都是采用的epoll模式实现,它会在Socket就绪的同时通知用户进程,把已就绪的Socket写入用户空间,不需要挨个遍历Socket来判断是否就绪。
select poll epoll 区别
select poll epoll都是I/O多路复用技术,都可以实现IO多路复用,但是它们的区别在于:
- select:每次调用select函数都需要把fd集合从用户态拷贝到内核态,效率低下。
- poll:poll的效率比select高,但是它没有最大连接数限制,原因是它是基于链表来存储的,而select是数组。
- epoll:epoll使用事件回调的方式,只需要注册一次事件,就可以接收到对应的事件通知,效率高。