共享內存是一種在相同機器中兩個正在運行的進程之間共享和傳遞數據的有效方式,不一樣進程之間共享的內存一般安排爲同一段物理內存;顧名思義,共享內存就是容許兩個不相關的進程訪問同一個邏輯內存。一個進程可建立一個可供其餘進程訪問的內存段,只要它分配了正確的權限。每一個內存段擁有一個唯一的 ID(稱爲 shmid),這個 ID 指向一個物理內存區域,其餘進程可在該區域操做它。建立並提供了合適的權限以後,同一臺機器中的其餘進程就能夠操做這些內存段:讀取、寫入和刪除,若是某個進程向共享內存寫入數據,所作的改動將當即影響到能夠訪問同一段共享內存的任何其餘進程。數據庫
這代表使用 C 語言編寫的應用程序可與使用其餘語言(好比 Java 或 PHP)編寫的應用程序共享信息。共享內存在針對大部分語言的實現中獲得了普遍使用,因此訪問應該不是問題。要理解信息,咱們可使用一種標準格式,好比 XML 或 JSON。緩存
共享內存的使用是一種在進程之間交換數據的快速方法,主要由於在建立內存段以後傳遞數據,不會涉及內核。這種方法經常稱爲進程間通訊 (IPC)。其餘 IPC 方法包括管道、消息隊列、RPC 和套接字。當使用須要彼此通訊的應用程序的生態系統時,這種在應用程序之間快速、可靠地交換數據的能力很是有用。取決於生態系統的大小,使用數據庫在應用程序之間交換信息的經常使用方法經常會致使查詢緩慢,甚至 I/O 阻塞。使用共享內存,沒有 I/O 會減緩開發人員的進度。函數
共享內存並未提供同步機制,也就是說,在第一個進程結束對共享內存的寫操做以前,並沒有自動機制能夠阻止第二個進程開始對它進行讀取。因此咱們一般須要用其餘的機制來同步對共享內存的訪問。學習
本文的提議很是簡單,學習如何使用 PHP 建立和操做共享內存段,使用它們存儲可供其餘應用程序使用的數據集。即便沒有使用共享內存交換數據的計劃,它自己也在許多好處,由於它使應用程序可以遠離 I/O 問題。將數據集直接存儲在內存中具備諸多優點,從 Web 服務數據緩存到會話共享。它是一個很是有用的概念,每一個 PHP 開發人員都應該知道。接口
使用共享內存的優缺點
一、優勢:咱們能夠看到使用共享內存進行進程間的通訊真的是很是方便,並且函數的接口也簡單,數據的共享還使進程間的數據不用傳送,而是直接訪問內存,也加快了程序的效率。同時,它也不像匿名管道那樣要求通訊的進程有必定的父子關係。隊列
二、缺點:共享內存沒有提供同步的機制,這使得咱們在使用共享內存進行進程間通訊時,每每要藉助其餘的手段來進行進程間的同步工做。進程
咱們可使用共享內存做爲一種獨特的存儲選項,提供快速讀/寫操做和進程互操做性等優點。對於 Web 應用程序,這意味着:內存
緩存存儲(數據庫查詢、Web 服務數據、外部數據)
會話存儲
應用程序之間的數據交換
此存儲技術不只對緩存有用,也對應用程序之間的數據交換也有用,只要數據以兩端均可讀的格式存儲。不要低估共享內存在 Web 應用程序中的力量。可採用許多不一樣的方式來巧妙地實現這種存儲,唯一的限制是開發人員的創造力和技能。開發