共享記憶體是最快的一種IPC方式

2021-10-04 03:59:37 字數 646 閱讀 1319

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

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

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

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

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

數學是一種思考方式

這幾天有個讀者來來去去給我寫了幾封 email 問起我的觀點 數學和程式設計是什麼關係?學程式設計需要多深的數學基礎?到底需要掌握哪些數學知識,對程式設計能力的提高有幫助。這個還真不好說。如果說起課堂上我們學到的知識。除了初等代數,在程式設計中我還真沒碰到多少依賴數學技能來解決的問題。當年我學 c ...

數學是一種思考方式

這幾天有個讀者來來去去給我寫了幾封 email 問起我的觀點 數學和程式設計是什麼關係?學程式設計需要多深的數學基礎?到底需要掌握哪些數學知識,對程式設計能力的提高有幫助。這個還真不好說。如果說起課堂上我們學到的知識。除了初等代數,在程式設計中我還真沒碰到多少依賴數學技能來解決的問題。當年我學 c ...

節約記憶體是一種罪惡 ZT

節約記憶體是一種罪惡?回福州幾天了,有好多東西想寫,可是由於一些個人問題而中斷了,那怎麼辦呢?今天來個重量級別高一點的內容吧。這可是我花了一兩年時間才明白的東西哪。是的,一兩年。似乎從我的第一位程式語言老師開始,任何人都這麼告訴我 寫出來的程式,要跑得又快佔的記憶體又少 不是嗎?第一位程式老師?噢,...