python共享內(nèi)存mmap mmap和shm共享內(nèi)存的區(qū)別和聯(lián)系?
mmap和shm共享內(nèi)存的區(qū)別和聯(lián)系?共享內(nèi)存允許兩個(gè)或多個(gè)進(jìn)程共享給定的存儲(chǔ)區(qū)域。因?yàn)閿?shù)據(jù)不需要來(lái)回復(fù)制,所以它是最快的進(jìn)程間通信機(jī)制。共享內(nèi)存可以通過(guò)MMAP()映射普通文件(或在特殊情況下匿名映
mmap和shm共享內(nèi)存的區(qū)別和聯(lián)系?
共享內(nèi)存允許兩個(gè)或多個(gè)進(jìn)程共享給定的存儲(chǔ)區(qū)域。因?yàn)閿?shù)據(jù)不需要來(lái)回復(fù)制,所以它是最快的進(jìn)程間通信機(jī)制。共享內(nèi)存可以通過(guò)MMAP()映射普通文件(或在特殊情況下匿名映射)或systemv共享內(nèi)存機(jī)制來(lái)實(shí)現(xiàn)。應(yīng)用界面和原理非常簡(jiǎn)單,內(nèi)部機(jī)制復(fù)雜。為了實(shí)現(xiàn)更安全的通信,通常與信號(hào)同步機(jī)制結(jié)合使用。例如,MMAP的機(jī)制是在磁盤(pán)上創(chuàng)建一個(gè)文件,并在每個(gè)進(jìn)程內(nèi)存中分隔一個(gè)映射空間。如果有多個(gè)進(jìn)程,實(shí)際的物理內(nèi)存(主內(nèi)存)不會(huì)消耗太多。SHM機(jī)制:每個(gè)進(jìn)程的共享內(nèi)存直接映射到實(shí)際的物理內(nèi)存。
1. MMAP被保存到實(shí)際的硬盤(pán)上,但是實(shí)際的存儲(chǔ)并沒(méi)有反映在主內(nèi)存中。優(yōu)點(diǎn):存儲(chǔ)容量大(比主存大);缺點(diǎn):進(jìn)程間讀寫(xiě)速度比主存慢。] 2. SHM存儲(chǔ)在物理內(nèi)存(主存)中,實(shí)際存儲(chǔ)容量直接反映在主存中。優(yōu)點(diǎn):進(jìn)程間訪問(wèn)速度(讀寫(xiě))比磁盤(pán)快;缺點(diǎn):存儲(chǔ)容量不能很大(超過(guò)主存)。使用方面:如果分配的存儲(chǔ)容量不大,則使用SHM;如果存儲(chǔ)容量較大,則使用MMAP。
進(jìn)程間通信,內(nèi)存映射和共享內(nèi)存的區(qū)別?
內(nèi)存映射文件是使用虛擬內(nèi)存將文件映射到進(jìn)程的地址空間。之后,進(jìn)程像處理空間中的地址一樣操作文件,比如C語(yǔ)言中的memcpy。這種方法可以很好地應(yīng)用于文件或大文件需要頻繁處理的場(chǎng)合,其IO效率高于普通IO
共享內(nèi)存是內(nèi)存映射文件的特例,它映射的是一塊內(nèi)存而不是磁盤(pán)上的文件。共享記憶的主題是過(guò)程。默認(rèn)情況下,操作系統(tǒng)為每個(gè)進(jìn)程分配一個(gè)內(nèi)存空間。每個(gè)進(jìn)程只允許訪問(wèn)操作系統(tǒng)分配給它的內(nèi)存,而不允許訪問(wèn)其他進(jìn)程的內(nèi)存。有時(shí)需要在不同的進(jìn)程之間訪問(wèn)相同的內(nèi)存。我們?cè)撛趺崔k?操作系統(tǒng)提供了訪問(wèn)共享內(nèi)存的API。需要共享內(nèi)存的進(jìn)程可以通過(guò)這組定義的api訪問(wèn)多個(gè)進(jìn)程之間的共享內(nèi)存。每個(gè)進(jìn)程訪問(wèn)這個(gè)內(nèi)存就像訪問(wèn)硬盤(pán)上的文件。NET4.0引入了系統(tǒng)IO. memorymappedfiles封裝了windows共享內(nèi)存API,這使它更易于使用。Net程序員使用內(nèi)存映射文件。