摘要:共享內存的使用是一種在進程之間交換數據的快速方法,主要因為在創建內存段之后傳遞數據,不會涉及內核。使用共享內存,沒有會減緩開發人員的進度。不要低估共享內存在應用程序中的力量。
共享內存是一種在相同機器中兩個正在運行的進程之間共享和傳遞數據的有效方式,不同進程之間共享的內存通常安排為同一段物理內存;顧名思義,共享內存就是允許兩個不相關的進程訪問同一個邏輯內存。一個進程可創建一個可供其他進程訪問的內存段,只要它分配了正確的權限。每個內存段擁有一個惟一的 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 應用程序中的力量。可采用許多不同的方式來巧妙地實現這種存儲,惟一的限制是開發人員的創造力和技能。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28940.html
摘要:共享內存的使用是一種在進程之間交換數據的快速方法,主要因為在創建內存段之后傳遞數據,不會涉及內核。使用共享內存,沒有會減緩開發人員的進度。不要低估共享內存在應用程序中的力量。 共享內存是一種在相同機器中兩個正在運行的進程之間共享和傳遞數據的有效方式,不同進程之間共享的內存通常安排為同一段物理內存;顧名思義,共享內存就是允許兩個不相關的進程訪問同一個邏輯內存。一個進程可創建一個可供其他進...
摘要:請注意,此函數返回一個編號,其他函數可使用該編號操作該共享內存段。從內存段讀取數據從共享內存段讀取數據很簡單。函數將該內存段標記為刪除,阻止任何其他進程打開它。 在之前的一篇博客[了解一下共享內存的概念及優缺點]已經對共享內存的概念做了說明。下面就來簡單使用共享內存(其實也可以用其他工具,比如redis) PHP做內存共享有兩套接口。一個是shm,它實際上是變量共享,會把對象變量序列化...
摘要:請注意,此函數返回一個編號,其他函數可使用該編號操作該共享內存段。從內存段讀取數據從共享內存段讀取數據很簡單。函數將該內存段標記為刪除,阻止任何其他進程打開它。 在之前的一篇博客[了解一下共享內存的概念及優缺點]已經對共享內存的概念做了說明。下面就來簡單使用共享內存(其實也可以用其他工具,比如redis) PHP做內存共享有兩套接口。一個是shm,它實際上是變量共享,會把對象變量序列化...
閱讀 876·2021-11-15 11:37
閱讀 3611·2021-11-11 16:55
閱讀 3276·2021-11-11 11:01
閱讀 1005·2019-08-30 15:43
閱讀 2751·2019-08-30 14:12
閱讀 686·2019-08-30 12:58
閱讀 3394·2019-08-29 15:19
閱讀 2033·2019-08-29 13:59