在了解阻塞IO和非阻塞IO之前,先看下一个具体的IO操作过程是怎么进行的。
通常来说,IO操作包括:对硬盘的读写、对socket的读写以及外设的读写。
当用户线程发起一个IO请求操作(本文以读请求操作为例),内核会去查看要读取的数据是否就绪,对于阻塞IO来说,如果数据没有就绪,则会一直在那等待,直到数据就绪;对于非阻塞IO来说,如果数据没有就绪,则会返回一个标志信息告知用户线程当前要读的数据没有就绪,当数据就绪之后,便将数据拷贝到用户线程,这样才完成了一个完整的IO读请求操作。
就是说一个完整的IO读请求操作包括两个阶段:
1)查看数据是否就绪;
2)进行数据拷贝(内核将数据拷贝到用户线程)。
阻塞(blocking IO)和非阻塞(non-blocking IO)的区别就在于第一个阶段,如果数据没有就绪,再查看数据是否就绪的过程中是一直等待,还是直接返回一个标志信息。
Java中传统的IO都是阻塞IO,比如通过socket来读数据,调用read()方法之后,如果数据没有就绪,当前线程就会一直阻塞在read方法调用那里,直到有数据才返回;而如果是非阻塞IO的话,当数据没有就绪,read()方法应该返回一个标志信息,告知当前线程数据没有就绪,而不是一直在那里等待。
相关推荐
Java提供了多种IO方式,包括传统的阻塞IO(BIO)、非阻塞IO(NIO)以及异步非阻塞IO(AIO,也称为NIO 2)。 1. **传统阻塞IO(BIO)**: - 基于`java.io`包,主要使用`File`、`InputStream`、`OutputStream`、`...
标题"自己写的Java NIO 同步不阻塞IO操作"指的是使用Java NIO库实现的同步但非阻塞的I/O操作。同步意味着程序会一直跟踪操作状态,直到完成;而不阻塞则是指在等待数据时,线程不会被挂起,可以继续执行其他任务。 ...
NIO 则不同,NIO 是非阻塞的,也就是说,在读写操作执行时,线程不会被堵塞,能够继续执行其他任务。 3. API 差异 标准 IO 和 NIO 的 API 也有很大的区别。在标准 IO 中,数据是一字节一字节地读取的,而 NIO 则将...
这里我们将深入探讨同步IO、异步IO、阻塞IO和非阻塞IO的概念,理解它们的工作原理以及在实际应用中的差异。 1. 同步IO与异步IO: - **同步IO**:在同步模式下,应用程序执行I/O操作时会等待操作完成。这意味着程序...
Java阻塞IO与非阻塞IO - OPEN 开发经验库
本文将重点探讨Java中的IO(Input/Output)和NIO(Non-blocking I/O)模型,以及它们在处理阻塞问题上的差异。 IO模型在Java中是基于流的,它主要通过`InputStream`和`OutputStream`接口及其子类来实现数据的读写。...
为此,Java 1.4 版本引入了新的I/O处理方式——NIO,即New IO。NIO提供了一种基于通道(Channel)和缓冲区(Buffer)的新模型。 - **通道(Channel)**:可以理解为数据的双向通道,支持数据的读取和写入。 - **缓冲...
1. 阻塞与非阻塞:Java IO是阻塞的,而NIO是非阻塞的,可以在没有数据可读时不做等待,而是继续处理其他任务。 2. 多路复用:NIO的选择器允许单线程管理多个通道,而传统的IO需要为每个连接创建一个新的线程,导致...
Java NIO(New IO)是Java 1.4引入的一个新模块,它是对传统IO(Input/Output)的扩展,提供了更高效的数据传输方式。在Java IO中,数据的读写是通过流进行的,而NIO则引入了通道(Channel)和缓冲区(Buffer)的...
相比于传统的IO(Input/Output)模型,NIO引入了非阻塞I/O、字符转换、缓冲和通道等新特性,极大地提高了Java程序在处理I/O操作时的性能。 1. **Buffer**:在传统的IO操作中,数据通常直接在流之间传输,这可能导致...
在IT行业中,输入/输出(IO)和网络IO(NIO)是编程中不可或缺的部分,尤其是在处理大量数据传输和网络通信时。Java平台提供了丰富的IO和NIO API,但它们的使用往往相对复杂,需要对底层机制有深入理解。本文将详细...
在Java编程领域,IO(Input/Output)和NIO(Non-blocking Input/Output)是两种不同的I/O模型,它们在处理数据输入和输出时有着显著的差异。本教程旨在帮助NIO初学者理解这两种模型的核心概念及其实际应用,通过具体...
NIO不同于传统的IO模型(即BIO,Blocking IO),它引入了通道(Channel)和缓冲区(Buffer)的概念,允许进行非阻塞的读写操作。在BIO中,读写操作通常是阻塞的,当数据未准备好时,线程会被挂起;而在NIO中,系统会...
三、阻塞IO和非阻塞IO 阻塞IO是指在IO操作过程中,如果条件不满足,会一直等待,直至条件满足。非阻塞IO是指在IO操作过程中,如果条件不满足,会立即返回一个标志信息告知条件不满足,不会一直等待。 四、同步IO和...
NIO(New IO)是Java平台中用于处理输入/输出操作的一种高级API,它在Java 1.4版本中引入,以替代传统的IO流模型。NIO提供了更高效、更灵活的数据传输方式,尤其适用于高并发和大数据量的场景。 在Java的NIO体系中...
- **Channel**:是NIO中进行I/O操作的基本单位,它可以是非阻塞的,这意味着当没有数据可读或可写时,`Channel`不会阻塞当前线程。 - **Buffer**:用于在`Channel`和应用程序之间传输数据,数据先读入`Buffer`,再从...
Java NIO(New IO,也称为Non-blocking IO)和传统的Java IO是Java编程语言中用于处理I/O操作的两种主要技术。随着互联网用户数量的激增,企业对应用程序的并发处理能力提出了更高的要求。为了解决传统Java IO模型在...
本文将深入探讨NIO(New Input/Output)与IO的区别,以及NIO中的关键概念——Channel、Buffer以及它们如何协同工作。 知识点1:NIO与IO的区别 IO(Input/Output)是Java早期提供的输入输出模型,其核心是基于流...