作為php瞭解一下共享記憶體的概念及優缺點

OldBoy~發表於2018-06-02

共享記憶體是一種在相同機器中兩個正在執行的程式之間共享和傳遞資料的有效方式,不同程式之間共享的記憶體通常安排為同一段實體記憶體;顧名思義,共享記憶體就是允許兩個不相關的程式訪問同一個邏輯記憶體。一個程式可建立一個可供其他程式訪問的記憶體段,只要它分配了正確的許可權。每個記憶體段擁有一個惟一的 ID(稱為 shmid),這個 ID 指向一個實體記憶體區域,其他程式可在該區域操作它。建立並提供了合適的許可權之後,同一臺機器中的其他程式就可以操作這些記憶體段:讀取、寫入和刪除,如果某個程式向共享記憶體寫入資料,所做的改動將立即影響到可以訪問同一段共享記憶體的任何其他程式。

這表明使用 C 語言編寫的應用程式可與使用其他語言(比如 Java 或 PHP)編寫的應用程式共享資訊。共享記憶體在針對大部分語言的實現中得到了廣泛使用,所以訪問應該不是問題。要理解資訊,我們可以使用一種標準格式,比如 XML 或 JSON。

共享記憶體的使用是一種在程式之間交換資料的快速方法,主要因為在建立記憶體段之後傳遞資料,不會涉及核心。這種方法常常稱為程式間通訊 (IPC)。其他 IPC 方法包括管道、訊息佇列、RPC 和套接字。當使用需要彼此通訊的應用程式的生態系統時,這種在應用程式之間快速、可靠地交換資料的能力非常有用。取決於生態系統的大小,使用資料庫在應用程式之間交換資訊的常用方法常常會導致查詢緩慢,甚至 I/O 阻塞。使用共享記憶體,沒有 I/O 會減緩開發人員的進度。

共享記憶體並未提供同步機制,也就是說,在第一個程式結束對共享記憶體的寫操作之前,並無自動機制可以阻止第二個程式開始對它進行讀取。所以我們通常需要用其他的機制來同步對共享記憶體的訪問。

本文的提議非常簡單,學習如何使用 PHP 建立和操作共享記憶體段,使用它們儲存可供其他應用程式使用的資料集。即使沒有使用共享記憶體交換資料的計劃,它本身也在許多好處,因為它使應用程式能夠遠離 I/O 問題。將資料集直接儲存在記憶體中具有諸多優勢,從 Web 服務資料快取到會話共享。它是一個非常有用的概念,每個 PHP 開發人員都應該知道。

使用共享記憶體的優缺點
1、優點:我們可以看到使用共享記憶體進行程式間的通訊真的是非常方便,而且函式的介面也簡單,資料的共享還使程式間的資料不用傳送,而是直接訪問記憶體,也加快了程式的效率。同時,它也不像匿名管道那樣要求通訊的程式有一定的父子關係。

2、缺點:共享記憶體沒有提供同步的機制,這使得我們在使用共享記憶體進行程式間通訊時,往往要藉助其他的手段來進行程式間的同步工作。

我們可以使用共享記憶體作為一種獨特的儲存選項,提供快速讀/寫操作和程式互操作性等優勢。對於 Web 應用程式,這意味著:

  • 快取儲存(資料庫查詢、Web 服務資料、外部資料)
  • 會話儲存
  • 應用程式之間的資料交換

此儲存技術不僅對快取有用,也對應用程式之間的資料交換也有用,只要資料以兩端都可讀的格式儲存。不要低估共享記憶體在 Web 應用程式中的力量。可採用許多不同的方式來巧妙地實現這種儲存,惟一的限制是開發人員的創造力和技能。

相關文章