BIO、NIO、NIO2.0(AIO)

参考文章:https://www.cnblogs.com/-900401/p/4015048.html

                  https://www.cnblogs.com/anny0404/p/5691379.html

                  https://blog.csdn.net/w3045872817/article/details/82840183

                  https://qindongliang.iteye.com/blog/2018539

                  https://blog.csdn.net/Jae_Peng/article/details/81298718

一,想了解BIO、NIO、AIO(NIO2.0)需先知道同步、异步、阻塞、非阻塞;

1、同步与异步?

    同步于异步的主要区别在方法调用的返回,(ps:调用者只有得到调用方法的返回才能继续执行)同步是调用的方法执行完毕才会返回,异步则是立即返回,然后线程继续执行,但是其异步调用的方法是在其他线程中真实执行的,整个过程不会阻碍调用者的工作,且执行完成后会通知其调用者;

2、阻塞与非阻塞

    阻塞:线程在执行I/O操作如磁盘读写或网络通信,通常要耗费大量的时间,此时系统会剥夺当前线程的CPu控制权,使其暂停,并将资源让给其他线程,这种调度的方式称之为阻塞;当I/O操作执行完成时这个线程的阻塞状态解除,恢复其对CPU的控制权,继续执行;

    非阻塞:当线程遇到I/O操作时,将I/O操作发送给系统,线程继续执行下一条语句,当操作系统执行完成之后,以事件的形式通知其线程;

3、同步/异步与阻塞/非阻塞之间的区别?

    同步与异步是目实现的目的,而阻塞与非阻塞则是实现同步与异步的方法;

4、阻塞与非阻塞的区别?

    阻塞模式下,一个线程只能处理一项任务,要想提高CPU利用率只能通过多线程的形式,可以避免资源的浪费;

    非阻塞模式下,CPU的利用率一直是100%,多线程只是为了在多核的情况下尽可能的利用CPU;、

二、什么是BIO、NIO、NIO2.0(AIO)

    BIO:同步阻塞,服务器的实现模式为一个连接一个线程,及客户端有连接时服务器端就需启动一个线程进行处理,如果这连接不做任何事情,会造成线程不必要的开销,可以通过线程机制来改善;

    NIO:异步阻塞,同步非阻塞,

            目的:基于事件驱动思想来实现的,其目的是为解决BIO的大并发的问题:如果大量的客户端连接时,就需要大量的线程,而每创建一个线程都需要分配一定的内存空间,而且操作系统也对线程的个数有一定程度的限制,客户的连接过多,可能导致服务端程序因为不堪重负而拒绝客户请求,甚至服务器可能会奔溃;

             同步非阻塞NIO机制:NIO是基于Reactor的,当socket有流可读或者socket可写流时,操作系统会通知引用程序进行处理,应用再将流读取到缓冲区或者写入操作系统,及此时不是一个连接一个线程了,而是有效地请求对应一个线程,当连接没有数据时,是没有线程进行处理的;

            内容:实现模式为一个请求一个线程, 即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程处理;用户进程也需要时不时的询问I/O操作是否就绪;

            NIO相较于BIO的主要不同点是:在使用BIO的时候我们往往会引入多线程,但是NIO则是使用单线程或者少量线程,每个连接共用一个线程;

            缺点:当并发量上来的时候会遇到BIO相同的问题;

           适用场景:连接多、I/O时间短的操作,例如聊天服务器;

    NIO2.0(AIO):异步非阻塞;

            内容:实现模式为一个有效请求一个线程,用户只需要发起一个I/O操作便会立即返回,等I/O操作真正的执行完成之后,引用程序会得到I/O操作的通知,此时用户只需要对数据进行处理,不需要进行实际的I/O操作,因为真正的I/O操作已经被内核操作完了;

            适用场景:连接多、I/O任务较长,例如相册;

5、同步阻塞、同步非阻塞、异步阻塞、异步非阻塞?

      同步阻塞:等待操作执行完成,才能继续向下执行;

      同步非阻塞:应用程序可以去做其他事,时不时的过来检查操作是否完成;

      异步阻塞:操作完成是会通知的,但是引用程序还是时不时的回来检查操作是否完成;

      异步非阻塞:应用程序操作其他事情,操作完成后会通知;

NIO待扩展,I/O多路复用等;

       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值