• 213 NIO编程


    NIO 非阻塞编程:

           核心组件: buffer 缓冲区   可写入读取数据的内存块 buffer.filp()转换读取模式

                              channel 通道    

                              Selector 选择器

         

          buffer:capacity容量(申请的大小),position位置(当前指向位置,读写切换时会归零),limit限制(写入的大小限制,读取的大小限制)

                    例: ByteBuffer类 allocate(指定大小)  实际封装的byte数组 compact() 清除已阅读的数据 mark()标记 reset() 重置位置

                    提供了直接内存(direct、allocateDirect()方式获取)和 非直接内存(heap)两种实现方式。堆外内存由于写时少一次拷贝操作(由于GC原因,heap->堆外->写入),操作更快。DirectByteBuffer提供clean方法回收堆外内存。

                    使用堆外内存时,需要参数限制使用大小,避免耗尽机器资源。

                 

        channel:创建网络连接+传输数据

                    bio操作:outputstream -> inputstream (单向)

                    nio操作(filechannel、socketchannel等等):buffer -- channel -> channel -- buffer 

                   socketchannel -- socket(注意:目前socket相关默认阻塞)

                   serverSocketChannel -- serverSocket

                   nio操作时,修改为非阻塞,需要不停判断buffer的状态

      selector:单线程管理多个通道,进行多个网络的监控。

                      实现原理---事件驱动机制

                      注册事件 - >  事件轮训获取通知 -> 事件分发

    reactor模式,多线程监听?

                    

             

  • 相关阅读:
    伐木工和森林的故事(一)
    EclipsePDT PHP的开发环境配置
    奇怪的using
    [团队开发]SERVER2008下无法安装VS2008 SP1 和 TFS2008 SP1补丁
    写在七夕
    一点点的松懈,就可以毁掉自己!
    2008,到今天我不后悔
    细节决定成败,注意的事情需要做到,而不是听完了当耳边风
    正视差距,展望2008!
    ZendStudio5.5调式环境配置
  • 原文地址:https://www.cnblogs.com/windghost/p/12627363.html
Copyright © 2020-2023  润新知