LOADING

加载过慢请开启缓存 浏览器默认开启

io多路复用

2025/4/11 io

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使用事件回调的方式,只需要注册一次事件,就可以接收到对应的事件通知,效率高。