Java NIO 零拷贝 演示 一、传统IO演进(详细机制需要参考操作系统知识进行理解) 1.用户态与内核态,需要经过 4 次拷贝和 3 次切换 2.内存映射优化(MMAP)需要经过 3 次拷贝和 3 次切换 3.Linux2.1 SendFile 优化,需要经过 3 次拷贝和 2 次切换 4.Linux2.4 内核修改,需要经过 2 次拷贝和 2 次切换 二、零拷贝演示 1.传统IO 1.服务端 2.客户端 3.先启动服务,在启动客户端,查看结果 2.零拷贝IO 1.服务端 2.客户端 3.先启动服务,在启动客户端,查看结果 一、传统IO演进(详细机制需要参考操作系统知识进行理解) 1.用户态与内核态,需要经过 4 次拷贝和 3 次切换 Data Memory Access 直接内存拷贝 KernelBuffer 内核缓冲区 CpuCopy 通过CPU拷贝 UserBuffer 用户缓冲区 SocketBuffer Socket缓冲区 ProtocolEngine 协议栈 DMA CpuCopy CpuCopy DMA 文件 KernelBuffer UserBuffer SocketBuffer ProtocolEngine 2.内存映射优化(MMAP)需要经过 3 次拷贝和 3 次切换 用户空间共享内核区数据,减少 1 次CPU拷贝