java 同步非阻塞io_Java:什么叫做同步非阻塞IO呢?

展开全部

首先这个不e69da5e6ba9062616964757a686964616f31333365653931是JAVA特有的概念。

同步非阻塞:同步指的是调用者程序需要等待被调用逻辑执行完毕才可以继续向下执行,阻塞指的是被调用程序逻辑不能立即返回,需要调用程序等待。“非阻塞”体现在I/O函数立即返回给调用者一个结果而不论I/O中是否含有数据。主程序需要根据每次调用I/O函数返回的值判断数据是否已经准备OK,如果可以被处理了才继续往下进行处理。(因此“其它的操作”,可以是不断轮询调用的IO函数,也可以做其它任何事情(比如我判断当前没有数据,就不处理数据了,随便干个别的事情完事- -!))

楼主之所以有疑问,是因为楼主的案例看起来都得等待IO完成才可以继续处理吧,看起来都是“阻塞”了主程序的数据处理逻辑(没有数据后续还做什么处理是吧),但事实是你可以不处理数据,做其它任何事情,因此上述IO并没有阻塞你的程序执行(IO函数没有阻塞调用者程序),只是在数据处理的逻辑上阻塞了(逻辑阻塞)。

总:楼主这个所谓“其他的操作“呢?在逻辑处理上应该是写一个轮训判断IO的数据是否OK,每一次轮训相对于是做了一个"其它操作",因为上一个时刻的函数调用并没有阻塞后一个时刻的函数调用。(注意理解“逻辑阻塞” 与 “程序阻塞”)

备注:推荐阅读unix BIO, NIO, AIO 这是三个是本质,java Netty即其中的I/O多路复用模型实现;(B: Block 阻塞的含义, N:Non-Block, A: Async)

之所以有这么多复杂的模型,实际上都是为了节省计算机的资源,按细了说比如CPU,比如内存。其它角度看,线程也是一种比较奢侈的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值