美文网首页
Netty基础-JAVA IO模型

Netty基础-JAVA IO模型

作者: 呵呵红红aa | 来源:发表于2020-10-14 14:24 被阅读0次

java - IO模型

BIO NIO AIO

同步与异步,阻塞与非阻塞

同步与异步是面向多个线程协作的情况。

假设我们设定一个场景,打电话到书店,咨询有没有 设计模式 这本书。

你好,请问有没有设计模式这本书?

我不太确定,需要去找一下,您等下我。

这时候为你和店家的行为为 同步模式,你需要拿着电话等到店家给你答复。等待店家回复的状态为阻塞状态

我不太确定,您先去忙吧,等过一段时间我给你回电话

这时候你和店家的行为为异步模式,在命令发出后,不需要等待答复,可以先做其他的事情。这个时候你的状态为非阻塞状态

BIO与NIO的区别

BIO是面向流的同步阻塞IO,每一个客户端与服务端的通讯都需要一个单独的线程,数据的读取写入必须阻塞在一个线程内等待其完成。

NIO是面向管道的同步非阻塞IO,它支持面向缓冲的基于管道的IO操作方法

  1. IO流是阻塞的,NIO流是不阻塞的
    NIO可以进行非阻塞的IO操作,线程在将数据从通道读取数据到buffer后就可以做其他的事情,一个线程写入一些数据到某通道,不需要等待完全写入,这个线程可以去做别的事情。

  2. IO面向流,NIO面向缓冲区

    Buffer是一个对象,包含要写入或者读出的数据,在面向流的IO中,可以将数据直接写入或者直接读到Stream中,而NIO是直接读到Buffer中进行操作。

  3. NIO通过通道进行读写

    通道是双向的,流是单向的。通道只能跟Buffer进行交互。因为通道的存在,通道可以异步的读写。

  4. NIO有选择器
    选择器可以通过单个线程处理多个通道,线程的切换对于操作系统来说是昂贵的,选择器提高了系统效率。

相关文章

网友评论

      本文标题:Netty基础-JAVA IO模型

      本文链接:https://www.haomeiwen.com/subject/dsqwpktx.html