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
点赞 回复 分享
发布于 2023-07-24 21:52 江苏
m
点赞 回复 分享
发布于 2023-07-27 00:28 上海
m
点赞 回复 分享
发布于 2023-07-30 11:43 浙江
m
点赞 回复 分享
发布于 2023-08-16 21:03 广东
m
点赞 回复 分享
发布于 2023-08-24 11:44 广东
m mmap,零拷贝
点赞 回复 分享
发布于 10-05 19:37 江苏

相关推荐

头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
评论
15
97
分享
牛客网
牛客企业服务