IO又叫BIO,是同步阻塞IO
NIO是同步非阻塞IO
AIO是异步IO
异步一定非阻塞
IO是一个socket连接对应一个线程,会造成大量阻塞。
NIO是对于IO的改进,基于Reactor模型,一个请求对应一个线程。
AIO是对于NIO的进一步改进,基于Proactor模型,一个有效请求对应一个线程。
R和P都会用到事件分离器
NIO在事件分离器注册读就绪事件和读就绪事件处理器。
AIO把注册的两个就绪换成完成。 完成 → 完成
NIO每次收到IO请求时,不断获取系统的IO使用权限
AIO则是系统自行获取IO权限并进行IO操作
epoll、poll、select都是用于同步IO,监听文件描述符上的可读可写
poll类似select,但是没有最大连接数,要轮询所有流所以时间复杂度为n
epoll是事件驱动的,时间复杂度为1