- 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 - 内存映射文件,将文件映射到内存中,直接进行读取和写入,避免内存拷贝