成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文帶你搞懂 Mmap 技術

開發 前端
其實這一切的背后都是操作系統的功勞。操作系統在這背后為我們做好了所有的映射和回寫工作。當我們對內存特定區域進行讀寫時,操作系統便會檢測到這一操作,然后根據不同場景去做讀磁盤或者寫磁盤的操作。

大家好,我是樹哥。

相信大家在面試的時候會被問到:Kafka 為啥會這么快?其中我們都會說是因為 zero-copy 的緣故,但 zero-copy 中其實有很多種實現方式,例如:mmap + write、sendfile 等等。這其中的 mmap 到底是咋回事呢?今天我們就來講講 mmap 技術。

mmap 是一種內存映射文件的方法,即將一個文件或者其它對象映射到進程的地址空間,實現文件磁盤地址和進程虛擬地址空間中一段虛擬地址的一一對映關系。

那么 mmap 技術有啥用呢?

答案是:減少數據文件復制,提高效率。

想一下我們讀取文件,然后將其通過網卡發送出去的流程,其整體流程如下所示:

圖片

圖片來自知乎博主艾小仙

上述數據讀取和發送過程發生了 4 次用戶態和內核態的上下文切換和 4 次拷貝,具體流程如下:

  1. 用戶進程通過 read () 方法向操作系統發起調用,此時進程從用戶態轉向內核態。
  2. DMA 控制器把數據從硬盤中拷貝到讀緩沖區。
  3. CPU 把讀緩沖區數據拷貝到應用緩沖區,上下文從內核態轉為用戶態,read () 返回
  4. 用戶進程通過 write () 方法發起調用,上下文從用戶態轉為內核態
  5. CPU 將應用緩沖區中數據拷貝到 socket 緩沖區
  6. DMA 控制器把數據從 socket 緩沖區拷貝到網卡,上下文從內核態切換回用戶態,write () 返回

可以看到數據要從內核空間的讀緩沖區讀取到用戶空間的用戶緩沖區,再拷貝到內核空間的 socket 緩沖區,這個過程其實是很浪費時間的。而 mmap 技術的出現,就是為了提高這個效率。 使用 mmap 技術進行文件讀寫操作的過程如下圖所示:

圖片

圖片來自知乎博主艾小仙

整個過程發生了 4 次用戶態和內核態的上下文切換和 3 次拷貝,具體流程如下:

  1. 用戶進程通過 mmap () 方法向操作系統發起調用,上下文從用戶態轉向內核態
  2. DMA 控制器把數據從硬盤中拷貝到讀緩沖區
  3. 上下文從內核態轉為用戶態,mmap 調用返回
  4. 用戶進程通過 write () 方法發起調用,上下文從用戶態轉為內核態
  5. CPU 將讀緩沖區中數據拷貝到 socket 緩沖區
  6. DMA 控制器把數據從 socket 緩沖區拷貝到網卡,上下文從內核態切換回用戶態,write () 返回

使用了 mmap 方式的文件讀寫節省了一次 CPU 拷貝,我們不需要再次從內核空間拷貝到用戶空間,然后再從用戶空間拷貝到內核空間。

此時我們會想:那這到底是怎么實現的呢?

其實這一切的背后都是操作系統的功勞。操作系統在這背后為我們做好了所有的映射和回寫工作。當我們對內存特定區域進行讀寫時,操作系統便會檢測到這一操作,然后根據不同場景去做讀磁盤或者寫磁盤的操作。

看到這里,對于 mmap 的理解基本上足夠我們應用開發人員使用了。

責任編輯:武曉燕 來源: 樹哥聊編程
相關推薦

2021-09-07 09:46:40

JavaScriptGenerator函數

2021-09-11 10:41:27

PythonPickle模塊

2024-11-19 13:20:55

2021-08-05 06:54:05

觀察者訂閱設計

2021-12-01 11:40:14

Python 輸入輸出

2024-04-12 12:19:08

語言模型AI

2021-11-06 10:18:30

Python變量常量

2022-03-24 08:51:48

Redis互聯網NoSQL

2021-09-28 07:12:10

avaScriptCurrying柯里化

2021-07-21 09:24:25

MongoDB數據庫 Python

2023-09-08 08:20:46

ThreadLoca多線程工具

2021-03-22 10:05:59

netstat命令Linux

2023-09-15 12:00:01

API應用程序接口

2022-09-27 08:00:00

零售商數據數據匹配

2022-08-03 08:01:16

CDN網站服務器

2020-02-21 20:10:13

搞懂事務隔離級別

2020-05-11 14:35:11

微服務架構代碼

2021-11-20 10:27:43

Python數據類型

2021-11-22 06:21:31

Python數據類型Python基礎

2021-03-06 08:04:46

NginxHttpHttps
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国偷自产在线 | 美女天堂 | 日本久久久影视 | 亚洲精品久久久久中文字幕二区 | 国产成人久久精品一区二区三区 | 青青久视频 | 成人乱人乱一区二区三区软件 | 国产在线看片 | h片在线免费观看 | 久久久蜜桃一区二区人 | 一本一道久久a久久精品综合蜜臀 | 激情婷婷 | a国产视频| 香蕉婷婷 | 亚洲午夜视频 | 亚洲一区黄色 | 日韩欧美一二三区 | 日韩在线视频一区二区三区 | 日韩视频免费在线 | 国产一级在线 | 日韩中文字幕视频在线观看 | 国产精品国产精品国产专区不卡 | 欧美中文 | 精品中文字幕久久 | 欧美日韩综合视频 | 成人综合在线视频 | 91国内精精品久久久久久婷婷 | 亚洲精品二区 | 成人免费一区二区三区视频网站 | 欧美亚洲在线 | 国产成人免费视频 | 中文字幕在线免费观看 | 免费永久av | 欧美一区二区在线看 | 国产精品完整版 | 亚洲欧美一区二区三区在线 | 九九热免费视频在线观看 | 国产98色在线 | 日韩 | 精品一区免费 | 精彩视频一区二区三区 | 在线日韩不卡 |