NIO 三大组件

NIO 基础

non-blocking-io 非阻塞IO

1. 三大组件

1.1 Channel & Buffer

channel 有一点类似与strem,他就是读写数据的双向通道,可以从channel将数据读入buffer,也可以将buffer写入channel,而之前的strem要么是输入,要么是输出,channel比stream更为底层

1.1.1常见的channel有

FileChannel

DatagramChannel

SocketChannel

ServerSocketChannel

1.1.2常见的buffer有

ByteBuffer:

MappedByteBuffer

DirectByteBuffer

HeapByteBuffer

ShortBuffer

IntBuffer

LongBuffer

FloatBuffer

DoubleBuffer

CharBuffer

1.2 Selector 选择器

selector 单从字面意思不好理解,需要结合服务器的设计演化来理解它的用途

多线程版本设计

缺点:

内存占用高

线程上下文切换成本高

只适合连接少的场景

线程池版本设计

缺点:

阻塞模式下,线程仅能处理一个sokcet链接

仅适合短连接场景

selector版设计

selector作用就是配合一个线程来管理多个channel,获取这些channel上发生的事件,channel工作在非阻塞模式下,不会让线程吊死在一个channel上。特别适合链接数特别多,但流量低的场景

调用selector的select()会阻塞直接channe发生了读写就绪事件,这些事件发送,select方法就会返回这些事件交给thread来处理。

相关推荐
说给风听.17 小时前
Maven 配置实战:从环境搭建到 Idea 关联(超详细)
java·maven·intellij-idea
果粒蹬i17 小时前
从割裂到融合:MATLAB与Python混合编程实战指南
开发语言·汇编·python·matlab
Hx_Ma1617 小时前
SSM 项目中 mq是什么
java
生骨大头菜17 小时前
对接金蝶上传附件接口
java·开发语言
skywalker_1117 小时前
File:路径详述
java·开发语言·file
2301_7903009617 小时前
嵌入式GPU编程
开发语言·c++·算法
AC赳赳老秦17 小时前
R语言数据分析:DeepSeek辅助生成统计建模代码与可视化图表
开发语言·人工智能·jmeter·数据挖掘·数据分析·r语言·deepseek
白日梦想家68117 小时前
深入浅出 JavaScript 定时器:从基础用法到避坑指南
开发语言·javascript·ecmascript
老友@17 小时前
JMeter 在 Linux 环境下进行生产级性能压测的完整实战指南
java·linux·jmeter·性能优化·系统架构·压测·性能瓶颈
阿湯哥17 小时前
Reactor响应式编程中Sinks.Many
java·reactor