linux的共享記憶體為什麼快

2021-10-12 10:16:46 字數 743 閱讀 7639

在linux程序間通訊的方式中,共享記憶體是一種最快的ipc方式。因此,共享記憶體用於實現程序間大量的資料傳輸,共享記憶體的話,會在記憶體中單獨開闢一段記憶體空間,這段記憶體空間有自己特有的資料結構,包括訪問許可權、大小和最近訪問的時間等。

為什麼說共享記憶體是最快的一種ipc方式呢?讓我們一起來看一下下面的這張圖:

從這張圖中,我們可以看出,使用管道(fifo/訊息佇列)從乙個檔案傳輸資訊到另外乙個檔案需要複製4次。一是,伺服器端將資訊從相應的檔案複製到server臨時緩衝區中;二是,從臨時緩衝區中複製到管道(fifo/訊息佇列);三是,客戶端將資訊從管道(fifo/訊息佇列)複製到client端的緩衝區中;四是,從client臨時緩衝區將資訊複製到輸出檔案中。

這個是對於不是共享記憶體的其他方式的訊息傳送過程,下面我們仔細來看一下對於共享記憶體而言,這種訊息傳送機制是怎樣的呢?我們還是先看一下下面這張圖:

準確的說,共享記憶體其實在核心,但是這塊記憶體允許核心記憶體區域對映到不同程序的中的位址空間去。

從這張圖中,我們可以看出,共享記憶體的訊息複製只有兩次。一是,從輸入檔案到共享記憶體;二是,從共享記憶體到輸出檔案。這樣就很大程度上提高了資料訪問的效率。

它將同一塊記憶體區域對映到共享它的不同程序的位址空間中,使得這些程序間的通訊就不需要再經過核心,只需對該共享的記憶體區域程序操作就可以了,但是它需要使用者自己進行同步操作。

linux如何手動釋放記憶體?為什麼要釋放記憶體?

前言 當在linux下頻繁訪問檔案後,物理記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching。這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法。那麼我來談談這個問題怎麼解決?proc是乙個虛擬檔案系統,可通過對它的讀寫操作做為與kernel實體間進行通訊...

linux 為什麼暫存器比記憶體快?

為什麼暫存器比記憶體快 計算機的儲存層次 memory hierarchy 之中,暫存器 register 最快,記憶體其次,最慢的是硬碟。原因一 距離不同 距離不是主要因素,但是最好懂,所以放在最前面說。記憶體離cpu比較遠,所以要耗費更長的時間讀取。以3ghz的cpu為例,電流每秒鐘可以振盪30...

為什麼暫存器比記憶體快?

計算機的儲存層次 memory hierarchy 之中,暫存器 register 最快,記憶體其次,最慢的是硬碟。同樣都是電晶體儲存裝置,為什麼暫存器比記憶體快呢?mike ash寫了一篇很好的解釋,非常通俗地回答了這個問題,有助於加深對硬體的理解。下面就是我的簡單翻譯。原因一 距離不同 距離不是...