根据 java.io/java.nio 进行阻塞
Blocking in terms of java.io/java.nio
我刚读过...
Classes that work with streams are located in two packages:
java.io and java.nio. Classes from the former implement
blocking of input/output (I/O): When bytes are being read/written by a
process, they become unavailable for other threads of execution. The
latter package offers non-blocking I/O with improved performance.
... 并且想更深入地了解这一点。阻塞是否只影响单个相关线程,但让源(即文件或数据库)本身不受阻塞,准备好被其他流访问?还是阻塞实际上阻止了源本身被访问,直到当前线程完成读取?
'Blocking' 表示您正在调用的 I/O 方法会阻塞调用线程,直到至少传输了一些数据,或者直到接受或连接操作成功或失败。
'Non-blocking' 表示如果无法传输任何数据,I/O 方法 return 会立即使用适当的 return 值或异常,或者连接操作在后台进行,稍后可以检查是否完成。
为了完整起见,'asynchronous' 表示 I/O 方法 return 立即执行,但该操作在后台继续,其结果可在适当的时候通过另一个调用获得,或者回调。
考虑您有 2 个线程的情况。两个线程都从单个套接字流中读取。这里我们关心的是我们正在读取的源字节以及我们需要根据 Multi-threading
进行检查。原因是由于Blocking I/O
阻塞 I/O:这是 I/O 无限期地等待源的可用性。线程的执行在此时等待,它增加了应用程序 Hang
或 Slowness
的机会。 java.io
包就是这种类型的例子
非阻塞I/O:这是I/O,它不会无限期地等待源,而是立即return。 java.nio
包就是这种类型的例子
阻塞基本上是指当线程调用 read() 或 write() 时,它会被阻塞而无法执行任何其他操作,直到有一些数据要读取或数据已写入。线程在此期间不能做任何其他事情。
所以阻塞是针对线程本身,而不是数据源。
我刚读过...
Classes that work with streams are located in two packages: java.io and java.nio. Classes from the former implement blocking of input/output (I/O): When bytes are being read/written by a process, they become unavailable for other threads of execution. The latter package offers non-blocking I/O with improved performance.
... 并且想更深入地了解这一点。阻塞是否只影响单个相关线程,但让源(即文件或数据库)本身不受阻塞,准备好被其他流访问?还是阻塞实际上阻止了源本身被访问,直到当前线程完成读取?
'Blocking' 表示您正在调用的 I/O 方法会阻塞调用线程,直到至少传输了一些数据,或者直到接受或连接操作成功或失败。
'Non-blocking' 表示如果无法传输任何数据,I/O 方法 return 会立即使用适当的 return 值或异常,或者连接操作在后台进行,稍后可以检查是否完成。
为了完整起见,'asynchronous' 表示 I/O 方法 return 立即执行,但该操作在后台继续,其结果可在适当的时候通过另一个调用获得,或者回调。
考虑您有 2 个线程的情况。两个线程都从单个套接字流中读取。这里我们关心的是我们正在读取的源字节以及我们需要根据 Multi-threading
进行检查。原因是由于Blocking I/O
阻塞 I/O:这是 I/O 无限期地等待源的可用性。线程的执行在此时等待,它增加了应用程序
Hang
或Slowness
的机会。java.io
包就是这种类型的例子非阻塞I/O:这是I/O,它不会无限期地等待源,而是立即return。
java.nio
包就是这种类型的例子
阻塞基本上是指当线程调用 read() 或 write() 时,它会被阻塞而无法执行任何其他操作,直到有一些数据要读取或数据已写入。线程在此期间不能做任何其他事情。
所以阻塞是针对线程本身,而不是数据源。