-
Notifications
You must be signed in to change notification settings - Fork 47
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
mmap 代码补充 #1
Comments
您好 您这个系列的Mysql的零拷贝技术好像看不到了 |
你能给出一个 URL 吗?我看看问题出在哪里。 |
https://spongecaptain.cool/zerocopyofmysql 也就是这一篇文章的底部的引用的第8个文章https://spongecaptain.cool/SimpleClearFileIO/2.%20DMA%20%E4%B8%8E%E9%9B%B6%E6%8B%B7%E8%B4%9D%E6%8A%80%E6%9C%AF.html |
谢谢。 |
您客气了。我阅读了您大部分博客的文章,感觉质量都很高,很深入,希望您多更新,也希望您有空可以介绍一下自己的学习方式。 |
mmap 机制可以很大程度上简化磁盘文件操作,通过一定的封装,磁盘上的文件读写操作可以简化为内存的读写操作。
(1)直接读写内存-简洁明了
简单地读写内存非常简单,例如下面向数组的第三个元素进行赋值:
内存中字段的读写操作相当自然,你甚至可能没有注意到在写内存这件事情。
(2)读写磁盘文件-步骤复杂
但是读写磁盘上的文件就相对复杂很多了,例如我们要在磁盘上读写的文件内容如下:
如果我们要读取文件开始 6 个偏移量后的 5 个字节数据,那么如下代码是一个方式:
读取磁盘上文件对比直接读取内存麻烦很多,步骤如下:
磁盘上文件读写比内存读写麻烦很多的原因就是 CPU 只能读写内存,而不能直接读写磁盘。磁盘文件上的字节数据需要首先读取到内存中,才能够被内存操作。
(3)mmap-读写磁盘文件就像读写内存
mmap 会负责将磁盘上不一定连续存储的数据按 block 读取到内核空间中,内核空间中的磁盘数据是连续的。然后,将内核空间中的数据映射到用户空间中,这个过程不涉及拷贝。
利用 mmap 机制,操作用户空间中的数据相当于操作磁盘上文件,它们之间的一致性依赖于缺页异常以及异步的 flush 机制实现。
案例代码如下:
案例来源说明:Go Mmap 文件内存映射简明教程
The text was updated successfully, but these errors were encountered: