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 江苏

相关推荐

03-18 20:28
已编辑
蚌埠坦克学院 Java
全程拷打实习40min1.在美团主要是做的是哪一块的这个可以展开来讲一讲吧2.接入层的异步化改造为什么要这么做之前的那个同步是有什么问题吗?3.那你改成了这个监听Binlog他是怎么解决你这个一致性问题的4.缓存迁移这个你们当时用的这个整体的SOP大概是这就可以展开来讲一下嘛5.迁移过程中你怎么保证新集群上的数据一定就是最准确,迁移过程中会不会有数据不一致或者说有没有数据校验这种问题6.告警系统有一个这个动态预值是咋设置的这动态阈值和cat埋点就预值是怎么设置的呢 ?就是你怎么去判断这个应该设置多少是有什么模型啊或者说是算法来判断嘛就是可能线上的环境可能抖动啊或者是怎么样的都可能会发生怎么会降低这个误告警的概率的7.场景:线上跑的集群请求量就可能就是一会就跌零了 ,但一会儿他又两三个请求因为有不同的集群不同的属性嘛他有些的集群是一直都有流量的有些集群他可能就没有流量但是他这种跌零呢又属于正常跌零但是但我怎么把它给剔除掉呢8.实习过程中对于mysql分库分表中间件这一块有使用的吗或者有一些了解吗9.限流策略里面令牌桶这个是大概是怎么设计的可以讲一下吗10.为什么用AT的分布式事务,分布式事物都会相对来说比较重一点为什么说一定要用那个分布式事务呢不能用一些别的手段去规避分布式事务11.AT大概实现逻辑12.undo_log表你们什么时候会多久会去清它一次呢?13.有学过其他语言吗?算法:合并区间经典反问发面经攒下人品
查看13道真题和解析
点赞 评论 收藏
分享
评论
15
98
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务