java nio 编程模型简介
所属分类 nio
浏览量 1089
Linux Java NIO 基于epoll 实现
epoll的3个阶段
注册事件(connect,accept,read,write)
轮询IO是否就绪
执行实际IO操作
2种模式 LT(水平触发)和 ET(边缘触发)
水平触发,又叫条件触发
边缘触发,又叫状态触发
socket 读写缓冲区
水平触发
读缓冲区只要不为空,就一直会触发读事件
写缓冲区只要不满,就一直会触发写事件
符合编程习惯,epoll的缺省模式
边缘触发
读缓冲区的状态,从空转为非空的时候,触发1次
写缓冲区的状态,从满转为非满的时候,触发1次
对于LT模式,要避免 写死循环 ,写缓冲区为满的概率很小,也就是 写的条件 会一直满足,
注册了写事件,没有数据要写,但它会一直触发,所以写完数据,一定要取消写事件
ET模式,要避免 short-read 问题
比如收到100个字节,它触发1次,
一定要把 读缓冲区 的数据读完
LT适用于阻塞和非阻塞IO, ET只适用于非阻塞IO
一般ET的性能更高,但编程难度更大,容易出错
read事件就绪
有新数据到来,需要去read ,LT模式,只要读缓冲区有数据,会一直触发
write事件就绪
本地的socket缓冲区没有满,就会一直触发写事件
要避免 写死循环 问题,写完就取消写事件
connect事件就绪 connect连接完成
accept事件就绪 有新的连接进来,调用accept处理
connect事件 注册1次,成功之后取消
read事件 注册之后不取消,一直监听
write事件 每调用一次send,注册1次,send成功取消注册
IO模式 Proactor与Reactor
网络IO模型
NIO概述
第一个 NIO server 例子
上一篇
下一篇
kafka消费端核心参数
kafka消费分区重平衡机制
Kafka网络模型
kafka Coordinator 简介
云原生时代的Java
进程io监控命令iopp