BIO与NIO与AIO的理解

说明:接触netty后,对同步、异步,阻塞、非阻塞有了新的认识,所以记录如下,供自己参考。

一、IO中的阻塞、非阻塞、同步、异步:

1、同步与异步:

同步请求:A调用B,B的处理是同步的,在处理完之前他不会通知A,只有处理完之后才会明确的通知A。

异步请求:A调用B,B的处理是异步的,B在接到请求后先告诉A我已经接到请求了,然后异步去处理,处理完之后通过回调等方式再通知A。

2、阻塞与非阻塞:

阻塞请求:A调用B,A一直等着B的返回,别的事情什么也不干。

非阻塞请求:A调用B,A不用一直等着B的返回,先去忙别的事情了。

3、阻塞、非阻塞和同步、异步的区别:

区别:阻塞、非阻塞说的是调用者,同步、异步说的是被调用者。

二、Java中的IO:

1、三种IO的解释:

Java BIO:全称Block-IO ,是一种同步且阻塞的通信模式。

Java NIO:全称Non-Block IO ,是Java SE 1.4版以后,针对网络传输效能优化的新功能。是一种非阻塞同步的通信模式。

Java AIO:全称Asynchronous IO,是异步非阻塞的IO,是一种非阻塞异步的通信模式。

2、以烧水为例:

BIO (Blocking I/O):有一排水壶在烧开水,BIO的工作模式就是,叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。但是实际上线程在等待水壶烧开的时间段什么都没有做。

NIO (New I/O):NIO的做法是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,从而进行下一步的操作。

AIO ( Asynchronous I/O):为每个水壶上面装了一个开关,水烧开之后,水壶会自动通知我水烧开了。

三、Linux的五种IO模型:

Java中提供的IO有关的API,在文件处理的时候,其实依赖操作系统层面的IO操作实现的。

Linux 2.6以后,Java中NIO和AIO都是通过epoll来实现的,而在Windows上,AIO是通过IOCP来实现的。

Java中的BIO、NIO和AIO理解为是Java语言对操作系统的各种IO模型的封装。

1、分类:

  • 阻塞IO模型
  • 非阻塞IO模型
  • IO复用模型
  • 信号驱动IO模型
  • 异步IO模型

2、区别:

3、同步与异步的区别:

以钓鱼为例:

我们钓鱼的时候,采用一种高科技钓鱼竿,即全自动钓鱼竿。可以自动感应鱼上钩,自动收竿,更厉害的可以自动把鱼放进鱼篓里。然后,通知我们鱼已经钓到了,他就继续去钓下一条鱼去了。这是异步处理。

需要人为的处理,如将鱼放入鱼篓中。这是同步处理。

 

以上内容来源:从漫话编程中总结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值