①同步阻塞IO、同步非阻塞IO、IO多路复用、信号驱动IO和异步IO。
②BIO属于同步阻塞IO模型,应用程序发起read调用后会一直阻塞在那里,直到内核把数据拷贝到用户空间中。
NIO属于同步非阻塞IO模型,在内核准备数据期间,应用程序会通过轮询操作一直发起read调用,此时线程是非阻塞的。但是将数据从内核空间拷贝到用户空间的这段时间内,线程依然是阻塞的,直到拷贝完成。同步非阻塞IO模型的最大缺点就是应用程序会不断地进行IO调用去询问内核是否把数据准备好了,这个过程是十分消耗CPU资源的。不过NIO可以通过Selector组件实现基于事件驱动的IO多路复用模型,从而解决这个问题,用户线程首先会发起select调用去询问内核是否把数据准备好了,内核把数据准备好了后会通知用户线程,用户线程此时再发起read调用。IO多路复用模型通过减少无效的IO调用,降低了对CPU的消耗。
AIO属于异步IO模型,它是基于事件和回调机制实现的,应用程序发起read调用后不会阻塞在那里,当内核处理完成后,操作系统会通知相应的线程进行后续的操作。