• 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性能。

  • 相关阅读:
    Android 从零搭建简单MVP Demo
    Ubuntu 16.04 安装wine QQ
    Android 根据字符串动态获取资源ID
    Android 个推 踩坑小结
    Android Studio 查看手机CPU信息
    J2EE 项目本地发布路径及修改
    Cucumber 安装
    [译] 第三十天:Play Framework
    [译] 第二十九天:Yeoman Chrom Generator
    [译] 第二十八天:Java开发者的OpenShift Eclipse 集成
  • 原文地址:https://www.cnblogs.com/mahuan2/p/4690798.html
Copyright © 2020-2023  润新知