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

相关推荐
盖世英雄酱581367 分钟前
java深度调试【第三章内存分析和堆内存设置】
java·后端
太过平凡的小蚂蚁13 分钟前
Kotlin 协程中常见的异步返回与控制方式(速览)
开发语言·前端·kotlin
007php00721 分钟前
京东面试题解析:同步方法、线程池、Spring、Dubbo、消息队列、Redis等
开发语言·后端·百度·面试·职场和发展·架构·1024程序员节
爬山算法27 分钟前
Redis(84)如何解决Redis的缓存击穿问题?
java·redis·缓存
程序定小飞30 分钟前
基于springboot的电影评论网站系统设计与实现
java·spring boot·后端
想唱rap40 分钟前
C++ list 类的使用
c语言·开发语言·数据结构·c++·笔记·算法·list
景彡先生42 分钟前
Python函数定义与调用全解析:从基础语法到实战技巧
linux·开发语言·python
一 乐1 小时前
汽车销售|汽车推荐|基于SprinBoot+vue的新能源汽车个性化推荐系统(源码+数据库+文档)
java·数据库·vue.js·汽车·毕设·汽车个性化推荐
虾说羊1 小时前
最细Maven教程以及Maven私服搭建
java·数据库·maven
杯莫停丶1 小时前
设计模式之:装饰器模式
java·设计模式·装饰器模式