美文网首页技术栈
2019-04-30——Java NOI

2019-04-30——Java NOI

作者: 烟雨乱平生 | 来源:发表于2019-04-30 18:02 被阅读0次

经典java IO库

  • 对于经典的IO除了Buffered开头的类,其他均没有加缓冲区,除非手动添加缓冲区
byte[] buffer = new byte[64];
inputStream.read(buffer);
  • 经典io是标准的同步阻塞模型,即在read的过程中,会阻塞当前线程,直到取完数据。

NIO

java NIO加入了Channels、Buffers、Selector。通过他们可以为java的io添加非阻塞IO。

IO的四种模型

  • 同步阻塞
    同步是对于线程而言的,如果进行IO的操作是当前线程,则为同步的,所以同步阻塞会导致当前线程阻塞,一般来说java中会开一个独立的线程进行同步阻塞的操作,以免程序假死。这是经典模型。

    image.png
  • 同步非阻塞
    同样是在一个线程中,不同的在于调用read()方法后立即返回,不阻塞。到底有没有获取数据,仍然需要我们在当前线程中判断read()的返回值,直到read()到值时再进行其他操作。与同步阻塞相比,阻塞的权限交给了代码编写者,同步阻塞是由jvm进行的阻塞(可能描述不标准),而同步非阻塞,其实还是需要我们在当前线程中轮训是否获取数据了,阻塞权交给了程序员。

    image.png
  • IO多路复用
    IO多路复用模型使用了Reactor设计模式实现了这一机制。

    image.png
  • 异步IO
    异步IO模型使用了Proactor设计模式实现了这一机制

    image.png

相关文章

网友评论

    本文标题:2019-04-30——Java NOI

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