zoukankan      html  css  js  c++  java
  • Nio笔记(一)

    (1)阻塞和非阻塞

    阻塞:数据内容是否准备就绪的一种处理方式。当数据没有准备的时候,阻塞往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否则一直等待在那里,

    非阻塞:当进程访问数据缓冲区时,数据没有猪呢比好的时,直接返回,不需要等待,数据有的时候,也直接返回。

    (2)同步和异步

    同步和异步都是基于应用程序和操作系统处理IO时间锁采用的方式,比如同步应用程序直接要参与IO读写的操作,异步:所有的IO读写交给操作系统去处理。同步的方式在处理IO事件的时候,必须阻塞在某个方法上等待IO事件完成(阻塞IO事件,轮询IO事件的方式),对于异步,所有的IO读写都交给了操作系统,此时,可以去处理其他的事情,不需要等待真正的IO操作,当操作完成IO后,给应用程序一个通知。

    同步:(1)阻塞到IO事件 , 没数据可读的时候,阻塞到read或者write,这时不能做其他事情,让读写方法加入到线程里面,然后阻塞线程来实现,对线程的性能开销比较大。

    (2)IO事件的轮询:多路复用技术(select 模式) 所有读写都阻塞时,读写事件交给一个单独的线程来处理。这个线程完成IO事件的注册功能,还有就是不断的去轮询我们的读写缓冲区,看是否有数据准备好。通知我们通知相应读写线程 这样的话 以前对读写线程可以做其他事情,这个时候阻塞的不是所有的IO线程,阻塞的select这个线程。

    javaIO模型:

    BIO:jdk 1.4前都是BIO,阻塞IO

    阻塞方法我们的读写,优化阻塞到线程,

    NIO:jdk1.4 linux多路复用技术(select模式),实现IO事件轮询的方式,同步非阻塞的模式,这种方式时主流的网络通信模式,

    Mina,netty mina2.0 netty5.0 网络通信框架。

    AIO:jdk1.7 (NIO2)才是实现真正的异步AIO,学习linux epoll模式,AIO使用的比较少。

    (3)NIO、AIO原理

    对于网络通信而言NIO,AIO并没有改变网络同信的基本步骤,只是在其原来的基础上(serversocket,socket)做里改进。

    Socket  建立连接需要三次握手 serversocket

    三次握手开销较大,解决方式:就是减少连接的次数,对读写通信管道进行一个抽象。对于读和写采用抽象的管道概念:Channel是一个TCP连接之间的抽象,一个TCP连接可以对应多个管道,而不是以前的方式,只有一个通信信道,减少了TCP连接的次数,

    UDP:采用相同的方式,也是抽象成管道。

    (4)NIO原理

    通过selector(选择器,多用复用技术),相当管家,管理所有的IO事件,Connection accept  客户端和服务端的读写

    selector(选择器)如何进行管理IO事件:

    当IO事件注册给选择器时候,选择器会给他们分配一个key(可以简单的理解成一个时间标签),当IO事件完成通过key值来找到相应的管道,然后通过管道发送数据和接收数据等操作,

    数据缓冲区:通过bytebuffer实现,提供很多读写的方法 put( ) get(),

    服务端:ServeSocketChannel

    客户端:SocketChannel

    选择器:Selector selector=Select.open();这样就打开了选择器

    SelectionKey:可以通过它来判断IO事件是否已经就绪。

      key.Acceptable:是否可以接受客户端的连接,

      key.connctionable:是否可以连接服务端

      key.isreadable():是否可读

      key.iswriteable():是否可写

    (5)如何获得事件的keys

      Selectionkey keys = selector.selectdKeys()

    (6)如何注册

      channel.regist(Selector.OP_WRITE);

       channel.regist(Selector.OP_Read);

      channel.regist(Selector.OP_Coonct);

      channel.regist(Selector.OP_Accept);

     (7)AIO

      服务端:AsynchronousServerSocketChannel

      客户端:AsychronousSocketChannel

      用户处理器:CompletionHandler接口,这个接口实现引用程序操作

      系统发起IO:请求当完成后处理具体逻辑,否则做自己该做的事情。

      

  • 相关阅读:
    Oracle数据库入门——体系结构
    基础知识——CentOS7操作系统的安装图文教程
    Oracle数据库入门——基础知识
    Windows Server 2008 R2 64位操作系统安装Oracle 11g 64位数据库,在客户终端上安装Oracle 11g 32位,才能安装P/L Sql Developer并配置
    2. Mysql数据库的入门知识
    1. Mysql数据库的安装
    Excel制作考勤管理
    常用函数公式及技巧搜集
    调试C++NPv2_Select_Reactor_Log_Server程序
    调试C++NPv2_Reactor_Log_Server程序
  • 原文地址:https://www.cnblogs.com/huaxueyihao/p/9158374.html
Copyright © 2011-2022 走看看