前言
前一段时间参与定位Tomcat某一问题,涉及到sendfile系统调用。忽然想到之前一些使用经验,知道Java领域中有不少开源软件,都使用零拷贝来提升期性能,于是有了本文。先看看我们这些耳熟能详的软件吧,你是否有了解过他们背后使用的技术点:
- Tomcat: 使用sendfile直接把大文件写入Socket,提升静态文件高效的数据传输
- Netty: 统一的ByteBuf机制,通过DirectBuffer封装,使用堆外内存进行Socket读写;也提供使用Sendfile来把文件缓冲区的数据发送到目标Channel
- RecketMQ:基于mmap内存映射文件方式对CommitLog文件读写文件,当客户端消费消息时直接把内容写到目标Socket
本文是对网上知识的收集与整理,以便分享给大家。本文中【OS层章节】中介绍零拷贝技术的部分内容与图片来源于看过就懂的java零拷贝及实现方式详解,在此先致谢。