一、共享內存shm
1 概念:多個進程的地址空間都映射到同一塊物理內存,這樣多個進程都能看到這塊物理內存,實現進程間通信,而且不需要數據的拷貝,所以速度最快。
二、內存映射mmap
1 前言:先介紹一下普通的讀寫文件的原理,進程調用read/write系統調用后會陷入內核,內核開始讀寫文件,假設內核是在讀文件,內核先把文件讀取到內核緩沖區,然后把內核緩沖區的數據拷貝到用戶緩沖區,實際上整個過程拷貝了兩次數據,即先從文件到內核緩沖區,再從內核緩沖區到用戶緩沖區;
2 概念:把某個文件映射到進程的地址空間,通過對地址空間的讀寫,實現對文件的讀寫,mmap系統調用可以使多個進程映射同一個普通文件來實現共享內存。普通文件映射到地址空間后,進程可以像訪問內存的方式一樣去訪問該文件,這樣不需要調用read/write系統調用,減少了用戶、內核切換的開銷;
三、二者的比較
1 共享內存shm是在內存中創建空間,然后每個進程映射到此處;內存映射mmap是創建一個文件,然后每個進程映射到此處;
2 當機器重啟時,mmap把文件保存在磁盤上,所以不會丟失,而共享內存shm存儲在內存上就會丟失;