38 lines
1.7 KiB
Markdown
38 lines
1.7 KiB
Markdown
- Java网络通信底层框架
|
||
- 通过NIO多路复用机制实现单线程万个连接
|
||
- 封装Selector/Channel/Buffer,提供Pipeline责任链式API
|
||
- 自带TCP粘包拆包、心跳检测、内存池
|
||
- 性能
|
||
- 基于NIO封装实现I/O多路复用
|
||
- Linux下使用epoll模型
|
||
- 使用零拷贝和堆外内存避免拷贝
|
||
- 利用对象池进行对象复用
|
||
- 扩展
|
||
- 基于事件驱动模型,将业务剥离为ChannelHandler,利用责任链可以根据不同业务扩展
|
||
- 线程处理
|
||
- 非耗时操作
|
||
- EventLoop直接处理
|
||
- 阻塞操作
|
||
- 提交到业务线程池
|
||
- I/O模型
|
||
- 同步阻塞BIO
|
||
- 同步非阻塞NIO
|
||
- IO多路复用
|
||
- 只使用一个select注册需要监听的连接,并管理连接数据是否就绪,已经就绪就通知别的线程用read来读取数据
|
||
- 信号驱动IO
|
||
- 异步IO
|
||
- 调用aio_read,然后其他操作由内核完成,内核完成后调用回调
|
||
- 使用场景
|
||
- 框架底层通信
|
||
- 游戏行业处理大量并发连接
|
||
- 通讯系统
|
||
- 物联网,处理内设备数据的收集与下发
|
||
- Reactor线程模型
|
||
- 单Reactor单线程模型
|
||
- 单Reactor多线程模型
|
||
- 主从Reactor多线程模型
|
||
- 零拷贝
|
||
- FileRegion,调用操作系统的sendfile函数,直接将文件数据从文件系统发送到网络接口,无须经过用户态内存
|
||
- CompositeByteBuffer,组合缓冲区,将多个ByteBuffer组合成一个逻辑上的缓冲区,不需要内存拷贝
|
||
- ByteBuf,通过堆外内存避免到JVM内存拷贝,支持将字节数组包装为ByteBuf,也可以通过slice将ByteBuf拆分为小ByteBuf
|
||
- 内存映射文件,将文件映射到内存中,直接进行读取和写入,避免内存拷贝 |