总结
本文开篇详述了 Linux 操作系统中的物理内存和虚拟内存,内核空间和用户空间的概念以及 Linux 内部的层级结构 。
在此基础上,进一步分析和对比传统 I/O 方式和零拷贝方式的区别,然后介绍了 Linux 内核提供的几种零拷贝实现 。
包括内存映射 mmap、Sendfile、Sendfile+DMA gather copy 以及 Splice 几种机制,并从系统调用和拷贝次数层面对它们进行了对比 。
接下来从源码着手分析了 Java NIO 对零拷贝的实现,主要包括基于内存映射(mmap)方式的 MappedByteBuffer 以及基于 Sendfile 方式的 FileChannel 。
最后在篇末简单的阐述了一下 Netty 中的零拷贝机制,以及 RocketMQ 和 Kafka 两种消息队列在零拷贝实现方式上的区别 。
作者:陈林
简介:五年研发与架构经验,曾任职 SAP 中国研发中心后端研发、上海冰鉴科技信息科技有限公司架构师助理,目前担任成都 ThoughtWorks 有限公司高级咨询师与研发人员 。熟悉大数据、高并发、负载均衡、缓存、数据库、消息中间件、搜索引擎、容器和自动化等领域 。个人学习能力强,技术热情高,热爱开源和写技术博客,善于沟通和分享 。
【支撑百万并发的“零拷贝”技术,你了解吗?】
推荐阅读
- 淘宝从百万到千万级并发的14次服务端架构演进之路
- 几百万扔进水?买二手房千万避开这几类房源
- 分布式、高并发、多线程,这些概念还傻傻分不清吗?
- Java 并发编程:如何保证共享变量的原子性?
- 硬核!如何模拟 5w+ 的并发用户?
- 格鲁吉亚中国茶王刘峻周诞辰150周年之际获百万赔偿
- 安徽省科技厅强化科技支撑推进精准扶贫
- PHP导出百万条数据方法
- 重金寻人 , 你是我们要找的百万英雄吗 内含福利
- 带你深入了解高并发架构
