
java nio
无名草110
人生如逆旅 我亦是行人
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java nio中,HeapByteBuffer与DirectByteBuffer的区别
HeapByteBuffer,顾名思义,是写在jvm堆上面的一个buffer,底层的本质是一个数组,用类封装维护了很多的索引(limit/position/capacity等) DirectByteBuffer,底层的数据其实是维护在操作系统的内存中,而不是jvm里,DirectByteBuffer里维护了一个引用address指向了数据,从而操作数据 HeapByteBuffer优点:...原创 2017-08-15 16:18:35 · 3135 阅读 · 2 评论 -
java普通io(stream)处理文件读写的过程
场景:使用java的stream,从文件a读取内容,然后写进文件b,整个过程如下图所示(以linux系统为例) 步骤解析: 1.用户空间向内核空间发出指令——我要读取文件a 2.系统切换上下文,从用户空间切到内核空间,内核空间准备向硬盘读取内容 3.硬盘内容以DMA形式读取进内核缓冲区(tips:DMA——Directory Memory Access 直接内存访问) 4.系统切换上...原创 2017-09-21 20:25:35 · 1431 阅读 · 0 评论 -
reactor模式前序:传统IO的WEB服务器设计
先看一段经典的WEB JAVA服务器设计 JAVA代码为(伪代码) ServerSocket serverSocket = ...; serverSocket.bind(8899); while (true) { final Socket socket = serverSocket.accept(); // 阻塞 new Thread(new Runnab...原创 2018-03-26 19:41:33 · 281 阅读 · 0 评论 -
reactor模式前序(二):NIO WEB服务器设计
前文介绍了传统IO的WEB经典服务器 reactor模式前序:传统IO的WEB服务器设计 下面看看JAVA NIO的WEB服务器设计 NIO是基于事件驱动的,对于NIO来说,重要组件是Selector,其服务器代码为: /* * 流程总结: * 1.初始时,只对accept事件感兴趣,selectionkey只有accept事件 * 2.当有连接进来时,处理完accept...原创 2018-03-27 11:29:08 · 212 阅读 · 0 评论 -
reactor模式:单线程的reactor模式
reactor模式称之为响应器模式,常用于nio的网络通信框架,其服务架构图如下 不同于传统IO的串行调度方式,NIO把整个服务请求分为五个阶段 read:接收到请求,读取数据 decode:解码数据 compute:业务逻辑处理 encode:返回数据编码 send:发送数据 其中,以read和send阶段IO最为频繁 代码实现 // Reactor線...原创 2018-03-27 14:58:13 · 3224 阅读 · 1 评论 -
reactor模式:多线程的reactor模式
上文说到单线程的reactor模式 reactor模式:单线程的reactor模式 单线程的reactor模式并没有解决IO和CPU处理速度不匹配问题,所以多线程的reactor模式引入线程池的概念,把耗时的IO操作交由线程池处理,处理完了之后再同步到selectionkey中,服务器架构图如下 上文(reactor模式:单线程的reactor模式)提到,以read和send...原创 2018-03-27 15:16:17 · 8103 阅读 · 0 评论 -
reactor模式:主从式reactor
前面两篇文章提到 reactor模式:单线程的reactor模式 reactor模式:多线程的reactor模式 NIO的server模式只有5个阶段,但是,NIO的selectionkey里确实有个accept事件,所以,为了区别,衍生出了主reactor和从reactor 并且,从reactor可以根据服务器的负荷,新增多个从reactor进行请求处理 服务器架构如下图 这个就...原创 2018-03-27 15:37:21 · 3711 阅读 · 0 评论 -
Buffer的重要属性 position/limit/capacity
package nio; import java.nio.IntBuffer; /** * Buffer的重要属性 position/limit/capacity * position:buffer当前所在的操作位置 * limit:buffer最大的操作位置 * capacity:buffer的最大长度 */ public class NioTest2 { public...原创 2018-07-19 17:14:13 · 2258 阅读 · 0 评论