BIO、NIO、AIO

IO

TEXT:

BIO NIO AIO

 

  • socket
    • 定义
      • socket不是java中独有的概念,而是一个语言无关标准,任何可以实现网络编程的编程语言都有socket
      • 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个链接的一端称为一个socket
    • 连接三次握手
      • server启动,开始监听
      • 1.client→server
        • 启动后,向server发起询问,hi,我准备连接你
      • 2.server→client
        • 可以,我已经准备好了,可以连接了
      • 3.client→server
        • 好的,我也准备好了,可以连接了
    • 断开四次挥手
      • 1.client→server
        • hi,我准备断开连接了
      • 2.server→client
        • 可以,我这边准备好了,你可以断开连接了
      • 3.server→client
        • 我已经断开连接了
      • 4.client→server
        • 好的,我也断开连接了
  • 长连接与短连接
    • 长连接
      • 建立连接后可以多次进行数据交互,io
    • 短连接
      • http
  • 同步异步&阻塞非阻塞
    • 同步异步
      • 定义:同步和异步是针对应用程序和内核的交互而言的。
      • 同步
        • 用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪
      • 异步
        • 用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到OS发来的IO完成的通知
        • OS需要支持异步IO操作的API
    • 阻塞非阻塞
      • 定义:进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,是一种读取或写入操作方法的实现方式
      • 阻塞
        • 读取或写入方法将一直等待
      • 非阻塞
        • 读取或写入方法会立即返回一个状态值
    • 同步异步 与 阻塞非阻塞 没有直接关联
  • BIO
    • Blocking IO
    • 同步阻塞的编程方式
    • JDK1.4出来之前
    • 步骤
      • 启动服务端,开始监听
      • 请求来了以后,为每一个客户端请求,创建一个socket连接(同时创建一个Thread),socket连接和请求客户端平级
      • socket连接和请求客户端,连接后,直接进行IO数据读写
      • socket连接和请求客户端,任何一方关闭,服务请求结束
    • 缺点
      • 并发效率比较低
    • 改进
      • 使用线程池
    • 试用场景
      • 连接数目比较小且固定的架构
  • NIO
    • Unblocking IO
      • New IO
    • 同步非阻塞的编程方式
    • 定义点
      • NIO本身是基于事件驱动思想来完成的,其主要想解决的是BIO的大并发问题
      • NIO基于Reactor,当socket有流可读或可写入socket时,操作系统会相应的通知引用程序进行处理
      • 不是一个连接就要对应一个处理线程了,而是有效的请求,对应一个线程,当连接没有数据时,是没有工作线程来处理的
      • NIO采用的是一种多路复用的机制,利用单线程轮询事件,高效定位就绪的Channel来决定做什么,只是Select阶段是阻塞式的,能有效避免大量连接数时,频繁线程的切换带来的性能或各种问题。
    • 并不能完全解决BIO的问题,当线程有访问JDBC时
    • NIO方式适用于连接数目多且连接比较短(请操作)的架构,比如聊天服务器,并发局限于应用中,编程复杂。
  • AIO
    • Asynchronous IO
      • 异步非阻塞的编程方式
    • 与NIO不同,当进行读写操作时,只须调用API的read或write方法即可,这两种方法均为异步的
    • read/write完成后,会主动调用回调函数。jdk7中,这部分内容被称作NIO.2,借助于OS的读buffer和写buffer
    • 异步非阻塞,服务器实现模式为,一个有效请求一个线程
    • AIO适用于连接数目多且连接比较长(重操作)的架构,比如 滴滴打车
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值