首页  

java nio 编程模型简介     所属分类 nio 浏览量 114
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