2,mmap内存映射的零拷贝

1,c/c++中的零拷贝是什么?

在 C/C++ 中,零拷贝(Zero Copy)通常指通过使用操作系统提供的特定 API,让应用程序在数据传输过程中避免不必要的数据复制,从而提高数据传输的效率和性能。

具体来说,在 C/C++ 中实现零拷贝通常有两种方式:

使用操作系统提供的 sendfile 系统调用。该系统调用可以在两个文件之间传输数据,而不需要将数据从内核缓冲区复制到用户空间缓冲区。这样可以避免数据复制,从而提高数据传输的效率。

使用操作系统提供的 mmap 系统调用。该系统调用可以将文件映射到进程的地址空间中,从而让进程可以直接访问文件的内容。这样,进程可以直接读取或写入文件的内容,而不需要进行中间的数据复制操作。


2,mmap内存映射的零拷贝

mmap(memory-mapped file)是一种将文件映射到进程地址空间的技术。
在使用 mmap 进行内存映射时,操作系统会将文件的内容映射到进程的虚拟地址空间中,使得进程可以直接通过指针访问文件的内容,而不需要进行中间的数据复制操作。

因此,mmap 技术可以被视为一种零拷贝技术。使用 mmap 进行内存映射时,可以避免将文件从磁盘读入内核缓冲区,然后再将数据从内核缓冲区拷贝到进程的用户空间缓冲区的过程,从而减少数据复制操作,提高数据传输的效率。

在使用 mmap 进行内存映射时,需要使用系统调用 mmap() 将文件映射到进程的虚拟地址空间中。一旦文件被映射到进程的虚拟地址空间中,进程就可以直接通过指针访问文件的内容,从而避免了数据复制的过程。



3,淘宝分布式存储引擎用的就是mmap

淘宝分布式存储引擎 TFS(Taobao File System)的确使用了 mmap 技术来进行数据存储和访问。

TFS 是一种针对海量小文件的分布式存储系统,它主要用于存储淘宝网站上的图片、视频等资源文件。在 TFS 中,每个文件被划分为多个数据块,每个数据块被存储在不同的物理节点上。当客户端需要访问某个文件时,TFS 首先会通过元数据服务确定该文件的数据块位置,然后通过网络将数据块读取到客户端。

在 TFS 中,每个数据块都被映射为一个文件,并使用 mmap 技术将其映射到内存中。这样可以避免将数据块从磁盘读入内核缓冲区,然后再将数据从内核缓冲区拷贝到用户空间缓冲区的过程,从而减少数据复制操作,提高读写性能。

全部评论
m
1 回复 分享
发布于 2023-08-10 11:11 陕西
m mmap,零拷贝
点赞 回复 分享
发布于 2024-10-05 19:37 江苏
m
点赞 回复 分享
发布于 2023-08-24 11:44 广东
m
点赞 回复 分享
发布于 2023-08-16 21:03 广东
m
点赞 回复 分享
发布于 2023-07-30 11:43 浙江
m
点赞 回复 分享
发布于 2023-07-27 00:28 上海
m
点赞 回复 分享
发布于 2023-07-24 21:52 江苏

相关推荐

04-26 15:09
已编辑
美团_测试开发(准入职员工)
面试官是女生,没开摄像头,进来先介绍技术栈,是否接受php整体30min1. Linux命令,文本处理;只问了我是否熟悉,我说熟悉,没深挖了2. 查看正在运行Java的进程;netstat、lsof,面试官回复ps命令呢,我说也用过,和lsof差不多,都可以查看3. 有没有用过MySQL集群,如果部署在单机,有没有保证可用性;因为是单体,评估了连接数,并且用了redis减轻压力进行兜底4. 提了一嘴RocketMQ,问我是用过的对吧;我说是的,没深挖5. MySQL索引结构;为什么要用B+树;聚簇索引和非聚簇索引6. 唯一索引是聚簇还是非聚簇?瞎猜了说是非聚簇,面试官让展开说说,回答是唯一索引只需要判断有没有重复,没必要用到聚簇索引,非聚簇够了。7. WAL技术?没听过,面试官说是数据库当中的预写日志,undo,redo,然后我回答了binlog,redolog,undolog8. CPU突然变高了怎么排查?top命令先定位进程,如果是程序,查看日志,看看是不是死循环了,定位后去修改;感觉没答好。9. springboot注解,MVC机制原理,回答了是通过拦截器拦截所有请求,根据URL去映射Controller10. 计网 浏览器输入URL整体流程11. 大整数相加,不用加法;不会12. 合并有序链表;ok13. 场景题,抖音的点赞,怎么设计,用到了哪些组件,表结构14. 两个文件,一个50w的URL,一个500,找到相同的URL15. 反问,能否提前实习#牛客AI配图神器##融360##秋招# #面经#
查看15道真题和解析
点赞 评论 收藏
分享
评论
15
98
分享

创作者周榜

更多
牛客网
牛客企业服务