• BIO,NIO,AIO


    BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,
      当然可以通过线程池机制改善。BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,
      JDK1.4以前的唯一选择,但程序直观简单易理解。
    NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
      NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
    AIO:异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理.
      AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。
     
    BIO:即阻塞I/O
    NIO
    有两个核心概念:Channel和Selector。
    Channel:具体的工作方式
    Selector:调度系统,负责调配Channel
     
    同步/不同步,阻塞/非阻塞
    阻塞与非阻塞主要是从CPU消耗上来说的,
    阻塞就是CPU停下来等待一个慢的操作完成以后,CPU才接着完成其他的事。
    非阻塞就是在这个慢的操作执行时CPU去干其他别的事,等这个慢的操作完成时,CPU再接着完成后续的操作。但非阻塞会带来系统线程切换增加。
    同步和异步是针对应用程序和内核的交互而言的,
    阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,
    阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。 
    总结:同步和异步是目的,阻塞和非阻塞是实现方式。
     
    四种组合方式:
    同步阻塞:I/O性能一般很差,CPU大部分处于空闲状态
    同步非阻塞:在网络I/O是长连接同时传输数据不是很多的情况下,提升性能非常有效。但是会增加CPU消耗
    异步阻塞:在分布式数据库中经常用到,尤其是在同时写多份相同数据的情况。
    异步非阻塞:在非常复杂的分布式情况下使用。
     

    1,同步和异步是针对应用程序和内核的交互而言的。
    2,阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。

    由上描述基本可以总结一句简短的话,同步和异步是目的,阻塞和非阻塞是实现方式。

    ● 同步阻塞IO(JAVA BIO):
    同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
    ● 同步非阻塞IO(Java NIO) :
    同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。用户进程也需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问。
    ● 异步阻塞IO(Java NIO):
    此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因为此时是通过select系统调用来完成的,而select函数本身的实现方式是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄(如果从UNP的角度看,select属于同步操作。因为select之后,进程还需要读写数据),从而提高系统的并发性!
    ● (Java AIO(NIO.2))异步非阻塞IO:
    在此种模式下,用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读取或者写入操作已经由内核完成了。

     java NIO、BIO、AIO全面剖析 http://blog.csdn.net/jiaomingliang/article/details/47684713BIO、NIO、AIO适用场景分析: 

    BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。 
    NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。 
    AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

     

    javaNIO原理(含代码)及与 同步阻塞IO 、伪异步IO比较 http://blog.csdn.net/jiaomingliang/article/details/46012185

  • 相关阅读:
    网络协议-应用层协议-HTTP协议简介
    网络协议-应用层协议-电子邮件协议
    网络协议-应用层协议-文件传输协议
    网络协议-应用层协议-远程登陆协议
    网络协议-应用层协议-概述
    网络协议-传输层协议-Socket编程
    网络协议-传输层协议-TCP协议
    网络协议-传输层协议-UDP协议
    北华大学网络赛题
    哈尔滨网络热身赛
  • 原文地址:https://www.cnblogs.com/novalist/p/6398108.html
Copyright © 2020-2023  润新知