学习笔记之BIO&NIO&AIO

    在介绍BIO、NIO、AIO之前先介绍几个相关概念。
同步IO和异步IO
    同步:在发出一个调用时,在没有得到结果之前,该调用就不返回。一旦调用返回,就得到返回值了。调用者主动等待这个调用的结果。
    异步:调用在发出之后就直接返回了,没有立刻得到返回结果。在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
阻塞I/O与非阻塞I/O
    阻塞I/O:内核在检查数据未就绪时,会一直等待,直到数据就绪
    非阻塞I/O:如果数据没有就绪,则会返回一个标志信息告知用户线程当前要读的数据没有就绪。
    Q:它们的区别在于I/O的第一阶段,阻塞是选择等待,非阻塞是返回一个标志信息,那么非阻塞I/O的优势在哪里呢?
    A:使用阻塞I/O处理网络连接时,有10000个连接就要开10000个线程,无论有没有数据到来,处理某一连接的线程必须“忠实地阻塞”。而非阻塞I/O就不需要这样,它可以维护一个1000个线程的线程池,当有数据就绪时,启动一个线程去接受数据,当没有数据时,线程不需要等待,直接就可以
回到池中,等待被调度到去接受其它连接。因此非阻塞I/O适合连接多但传输的数据内容不大的情况。
传统的BIO
    BIO是同步阻塞IO,整个IO过程中线程都处于阻塞状态。例如常用的基于字节流的InputStream和OutputStream以及基于字符流的Reader和Writer。
在这里插入图片描述
NIO
    NIO是同步非阻塞IO,与传统BIO不同,NIO基于channel和buffer。Channel提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由Buffer。在NIO中,每个连接注册在一个多路复用器selector上,一个连接对应一个channel,当有channel有事件发生时再启动线程处理事件,不需要为每个连接创建线程。
在这里插入图片描述
AIO
    AIO是异步非阻塞IO,也叫NIO2.0。在NIO中,应用程序通过selector轮询检测到某个Channel有可读数据时,创建处理线程读写数据。而在AIO中,应用程序仅仅需要告诉OS,我需要什么数据,并提供给OS一个Buffer和一个回调。OS会自己检测Channel的可读性,当发现其可读,会自动将数据复制到Buffer中,并通过回调通知应用程序任务完成。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值