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模式,多线程监听?

                

 

         

posted on   李某人的窥视  阅读(93)  评论(0编辑  收藏  举报

编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示