JAVA NIO 不是同步非阻塞I/O吗,为什么说JAVA NIO提供了基于Selector的异步网络I/O?

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java nio的io模型是同步非阻塞,这里的同步异步指的是真正io操作(数据内核态用户态的拷贝)是否需要进程参与。

而说java nio提供了异步处理,这个异步应该是指编程模型上的异步。基于reactor模式的事件驱动,事件处理器的注册和处理器的执行是异步的。

JAVA NIO是同步非阻塞io。同步和异步说的是消息的通知机制,阻塞非阻塞说的是线程的状态 。

下面说说我的理解,client和服务器建立了socket连接:
1、同步阻塞io(Blocking, synchronous):client在调用read()方法时,stream里没有数据可读,线程停止向下执行,直至stream有数据。

  • 阻塞
    :体现在这个线程不能干别的了,只能在这里等着

  • 同步
    :是体现在消息通知机制上的,即stream有没有数据是需要我自己来判断的。

device = IO.open()
data = device.read() # thread will be blocked until there is no data in the device
print(data)

2、同步非阻塞io(Non-blocking, synchronous)

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值