共享內存容許兩個或多個進程共享一個給定的存儲區,由於數據不須要來回複製,因此是最快的一種進程間通訊機制。共享內存能夠經過mmap()映射普通文件(特殊狀況下還能夠採用匿名映射)機制實現,也能夠經過系統V共享內存機制實現。應用接口和原理很簡單,內部機制複雜。爲了實現更安全通訊,每每還與信號燈等同步機制共同使用。linux
mmap的機制如:就是在磁盤上創建一個文件,每一個進程存儲器裏面,單獨開闢一個空間來進行映射。若是多進程的話,那麼不會對實際的物理存儲器(主存)消耗太大。windows
shm的機制:每一個進程的共享內存都直接映射到實際物理存儲器裏面。、 mmap函數是unix/linux下的系統調用,mmap系統調用並非徹底爲了用於共享內存而設計的。它自己提供了不一樣於通常對普通文件的訪問方式,進程能夠像讀寫內存同樣對普通文件的操做。而Posix或系統V的共享內存IPC則純粹用於共享目的,固然mmap()實現共享內存也是其主要應用之一。安全
mmap系統調用使得進程之間經過映射同一個普通文件實現共享內存。普通文件被映射到進程地址空間後,進程能夠像訪問普通內存同樣對文件進行訪問,沒必要再調用read(),write()等操做。mmap並不分配空間, 只是將文件映射到調用進程的地址空間裏, 而後你就能夠用memcpy等操做寫文件, 而不用write()了.寫完後用msync()同步一下, 你所寫的內容就保存到文件裏了. 不過這種方式沒辦法增長文件的長度, 由於要映射的長度在調用mmap()的時候就決定了.函數
簡單說就是把一個文件的內容在內存裏面作一個映像,內存比磁盤快些。大數據