Java IO&NIO

定义

用户线程:A
内核:K

阻塞 IO 模型

过程模拟:
A -> data = socket.read()
我要读数据,没数据我就等着,有数据就给我。

非阻塞 IO 模型

A -> data = socket.read()
我要读数据,没数据返回给我个 error,我循环着再次发起 read
有数据了则拿数据处理,处理结束后跳出循环。
用户线程不断循环获取 socket 状态

多路复用 IO 模型

A -> data = socket.read()
我要读数据
内核 K 轮询所有 socket 状态,哪个 socket 就绪时,对应的用户线程才调用实际的 IO 读写操作。

信号驱动的 IO 模型

A 我要读数据 -> 在 socket 内注册一个信号函数,用户线程继续执行。
内核数据就绪 -> 发送信号给 A -> A 调用 IO 读写操作

异步 IO 模型

A 我要读数据 -> asynchronous read
内核:我知道了,交给我就好了。
内核:等数据完成,将数据拷贝到用户线程 A,搞定后发消息给 A
A:收到信号,直接用数据就好了,不用再去调用 IO 读写操作。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022 qusong
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信