对于四种IO模型的理解

1.分别什么是阻塞、什么是同步?

阻塞:用户程序向操作系统提出IO请求,操作系统对于用户程序的请求是否立即返回,如果立即返回就是非阻塞的,如果不是立即返回的就是阻塞的;

同步:用户程序的读写操作是否暂停用户程序,如果用户程序停下手头的工作去忙活读写操作就是同步的,如果不用停下用户程序,操作系统就可以帮忙读写那就是异步的;

2.IO的几种类型

1.同步阻塞IO(BIO):

  用户程序向操作系统发送请求后,操作系统一直不返回所以一直堵塞,当操作系统将数据准备好以后返回,然后用户程序将数据写入socket空间或者将数据读出socket空间;

2,同步非阻塞IO(NIO)//NIO有两种,还有一种是IO多路复用

  用户程序向操作系统发送请求后,操作体统立即返回(非阻塞),返回之后用户程序可以继续进行自己的事,用户线程要定时轮询检查数据是否就绪,当数据就绪后,用户线程将数据从用户空间写入socket空间,或从socket空间读取数据到用户空间(同步)。

3.IO多路复用

  用户程序向操作系统发送请求后,操作系统立即返回(非阻塞),将socket连接及关注事件注册到selector(多路复用器,os级别线程)上,selector循环遍历socket连接,看是否有关注数据就绪,如果连接有数据就绪后,就通知应用程序,建立线程进行数据读写。同BIO对比,NIO中线程处理的都是有效连接(数据就绪),且一个线程可以分管处理多个连接上的就绪数据,节省线程资源开销。

上一个NIO轮询检查数据是否就绪,多路复用就是将数据是否就绪的问题交给了操作系统,当数据准备就绪后通知用户程序建立连接进行想要的IO操作;

3.异步非阻塞(AIO):

  用户程序向操作系统发送请求后,操作系统立即返回(非阻塞),当操作系统将数据的读写操作完成后才会通知用户程序,这里面的读写操作也都是OS进行的不会停止用户程序(异步);

原文地址:https://www.cnblogs.com/frank9571/p/11970479.html