java nio的io模型是同步非阻塞,这里的同步异步指的是真正io操作(数据内核态用户态的拷贝)是否需要进程参与。
而说java nio提供了异步处理,这个异步应该是指编程模型上的异步。基于reactor模式的事件驱动,事件处理器的注册和处理器的执行是异步的。
JAVA NIO是同步非阻塞io。同步和异步说的是消息的通知机制,阻塞非阻塞说的是线程的状态 。
下面说说我的理解,client和服务器建立了socket连接:
1、同步阻塞io(Blocking, synchronous):client在调用read()方法时,stream里没有数据可读,线程停止向下执行,直至stream有数据。
device = IO.open()
data = device.read() # thread will be blocked until there is no data in the device
print(data)
JAVA NIO:同步非阻塞与异步网络I/O解析

JAVA NIO被称为同步非阻塞I/O,同步涉及消息通知机制,而非阻塞指线程不等待IO操作完成。然而,其基于Selector的编程模型实现了事件驱动的异步处理。在同步非阻塞IO中,线程不会因等待数据而阻塞,但需要轮询检查数据准备情况,可能导致CPU资源浪费。异步非阻塞IO则由操作系统在数据准备就绪时主动通知线程,避免了轮询开销。
最低0.47元/天 解锁文章
442

被折叠的 条评论
为什么被折叠?



