• JAVA NIO的理解


    在使用JAVA提供的Socket的IO方法时,服务端为了方便操作,会为每一个连接新建一个线程,一个线程处理一个客户端的数据交互。
    但是当大量客户端同服务端连接时,会创建大量的线程,线程之间的切换会严重影响服务端性能,并且有时每一个的线程寿命并不长,有的甚至很短。
    影响服务端性能的根本原因就是线程数量过多。
    为了解决此问题,可使用线程池的方法。但是使用线程池,依然是一个线程处理一个连接,并且线程的大小会限制同时处理的连接数,依然无法继续提高性能,因此可使用NIO方法,通过一个线程处理多个连接,减少线程切换的耗时,提高性能。
    由于通过一个线程处理了多个连接,因此同原生IO的使用方法也将有所不同。
    其中有几个新的类需要注意:Channel,Selector,Buffer。
    Channel代表了一个IO操作实例,而每一个Selector会新建一个线程,只需将Channel以及其需要通知的变化注册到Selector,并可通过循环查询Selector的状态,知道哪些Channel发生了相应的IO变化,从而进一步操作Channel。
    此时如果使用了非阻塞Channel,所有的IO数据会从源流中保存到Buffer实例中,所以数据的操作位置也发生了变化,从InputStream和OutputStream转移到了Buffer中。
    通过NIO,提高了大量短时并发IO性能。

  • 相关阅读:
    AD域新建用户
    Windows程序设计(1)
    C++ 进阶 模板和STL
    C++ 基于多态的职工管理系统
    C++核心编程
    C++入门-控制台版的通讯录管理系统
    第一章、熟悉工作环境和相关工具
    Spring整合JDBC temple
    SpringMVC整合mybaitis
    实验12 添加0号中断处理程序
  • 原文地址:https://www.cnblogs.com/mahuan2/p/4690798.html
Copyright © 2020-2023  润新知