同步和异步,阻塞非阻塞IO

IO中的同步和异步:
同步阻塞:io操作是由应用程发起和进行的,操作系统听候应用程指挥,例如应用程序进行read后操作系统就会进行read操作。
表现为必须收到io操作的结果后线程才能继续向下执行,当前cpu只能等到内核态读写完毕,才能进行其它操作。
同步非阻塞:cpu不用等待当前内核态读写完毕,可以去执行其它的线程,但是在此期间需要不断轮询内核态读写操作是否完成。
异步非阻塞:io操作是由应用程序发起,但是由操作系统去执行的,即分配给了操作系统这个io任务之后,cpu执行其它线程,不会等待io操作的返回结果,当操作系统执行完io操作后就会通知应用程:您分配给我的io任务我已经做完了 。
BIO(同步阻塞):传统的java.io包下的字节输入输出流。
缺点:当read或者write容易阻塞,例如当内核缓冲区为空时读数据或者内核缓冲区满时写数据,会发生阻塞,这时候线程就会阻塞,知道读操作或者写操作成功线程才会继续执行。可以使用线程池优化。

NIO(同步不阻塞):在网络传输中,有请求才创建线程,没有请求时,线程就可以做其它的事情,例如处理其它有请求的连接。

NIO 是一种同步非阻塞的 I/O 模型,于 Java 1.4 中引入,对应 java.nio 包,提供了 Channel , Selector,Buffer 等抽象。NIO 中的 N 可以理解为 Non-blocking,不单纯是 New。它支持面向缓冲的,基于通道的 I/O 操作方法。 NIO 提供了与传统 BIO 模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发。
在这里插入图片描述

(AIO)异步非阻塞的方式:
在网络传输中,将io操作交给操作系统去执行,当io操作完成后,会返回一个io操作成功的信号,这时候才会创建线程,,其它时间线程可以处理其它的连接,和同步不阻塞的区别是不会多次试探了,操作系统完成后会返回信号通知应用程序。

网络传输-服务器端:
BIO:一个连接就创建一个线程,即无论有没有请求都创建一个线程。
NIO:一个有请求的连接对应一个线程,需要应用层试探。
AIO:,即操作系统完成io操作后才创建对应线程,不用应用层自己试探。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值