IO模型

[原创]个人理解,请批判接受,有误请指正。转载请注明出处: https://heyfl.gitee.io/system/IO-model.html

背景

服务器网络模型
这篇IO模型是《每天进步一点点》里的第一篇学习记录,真的是忘了看看了忘了。。其实不用记服务器的,大概理一下JAVA自己的就简单多了,这里稍微总结一下:

JAVA IO模型

JAVA的IO模型分为BIO、NIO、AIO三种,其中BIO是阻塞IO,NIO是非阻塞IO,AIO是异步IO

  1. 阻塞IO模型:
    Java中常见的阻塞IO操作包括InputStream的read()方法和OutputStream的write()方法。这些操作在底层系统中对应着同步阻塞IO模型,即当应用程序调用这些操作时,如果数据没有准备好,操作将会一直阻塞,直到数据准备就绪才会返回结果。
  2. 非阻塞IO模型:
    Java中的非阻塞IO操作包括SocketChannel的read()和write()方法。这些操作在底层系统中对应着同步非阻塞IO模型,即当应用程序调用这些操作时,如果数据没有准备好,操作会立即返回并告诉应用程序数据是否准备就绪,如果数据没有准备好,应用程序可以继续执行其他任务而不是等待IO操作完成。
  3. 异步IO模型:
    Java中常见的异步IO操作包括AsynchronousSocketChannel的read()和write()方法。这些操作在底层系统中对应着异步IO模型,即当应用程序调用这些操作时,操作的完成会通过回调函数的方式通知应用程序,应用程序可以继续执行其他任务而不需要等待IO操作完成。

NIO与AIO的异同

其中非阻塞IO和异步IO看着很相似,其实说白了就是异步IO多了个回调,用户线程完全不需要等待(不用跟NIO那样一直在epoll那里等待)

一些笔记

img.png

作者

神奇宝贝大师

发布于

2020-10-03

更新于

2021-12-10

许可协议

评论