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来处理。

相关推荐
坏柠几秒前
ESP32-S3 的 I²C:从“能连设备”到“工程上用得顺”
c语言·开发语言
Swift社区1 分钟前
Python 图片验证码库推荐与实践指南
开发语言·python
进击的小头1 分钟前
C语言实现设计模式的核心基石
c语言·开发语言·设计模式
Yupureki2 分钟前
《算法竞赛从入门到国奖》算法基础:入门篇-递归初阶
c语言·开发语言·数据结构·c++·算法·visual studio
有谁看见我的剑了?4 分钟前
Python更换依赖包下载源
开发语言·python
Java程序员威哥6 分钟前
云原生Java应用优化实战:资源限制+JVM参数调优,容器启动快50%
java·开发语言·jvm·python·docker·云原生
多多*7 分钟前
程序设计工作室1月21日内部训练赛
java·开发语言·网络·jvm·tcp/ip
Engineer邓祥浩8 分钟前
设计模式学习(15) 23-13 模版方法模式
java·学习·设计模式
茶本无香9 分钟前
设计模式之四:建造者模式(Builder Pattern)详解
java·设计模式·建造者模式
毕设源码-赖学姐9 分钟前
【开题答辩全过程】以 高校素拓分管理系统的设计与开发为例,包含答辩的问题和答案
java·eclipse