摘要:共享內(nèi)存的使用是一種在進(jìn)程之間交換數(shù)據(jù)的快速方法,主要因?yàn)樵趧?chuàng)建內(nèi)存段之后傳遞數(shù)據(jù),不會(huì)涉及內(nèi)核。使用共享內(nèi)存,沒(méi)有會(huì)減緩開(kāi)發(fā)人員的進(jìn)度。不要低估共享內(nèi)存在應(yīng)用程序中的力量。
共享內(nèi)存是一種在相同機(jī)器中兩個(gè)正在運(yùn)行的進(jìn)程之間共享和傳遞數(shù)據(jù)的有效方式,不同進(jìn)程之間共享的內(nèi)存通常安排為同一段物理內(nèi)存;顧名思義,共享內(nèi)存就是允許兩個(gè)不相關(guān)的進(jìn)程訪問(wèn)同一個(gè)邏輯內(nèi)存。一個(gè)進(jìn)程可創(chuàng)建一個(gè)可供其他進(jìn)程訪問(wèn)的內(nèi)存段,只要它分配了正確的權(quán)限。每個(gè)內(nèi)存段擁有一個(gè)惟一的 ID(稱為 shmid),這個(gè) ID 指向一個(gè)物理內(nèi)存區(qū)域,其他進(jìn)程可在該區(qū)域操作它。創(chuàng)建并提供了合適的權(quán)限之后,同一臺(tái)機(jī)器中的其他進(jìn)程就可以操作這些內(nèi)存段:讀取、寫(xiě)入和刪除,如果某個(gè)進(jìn)程向共享內(nèi)存寫(xiě)入數(shù)據(jù),所做的改動(dòng)將立即影響到可以訪問(wèn)同一段共享內(nèi)存的任何其他進(jìn)程。
這表明使用 C 語(yǔ)言編寫(xiě)的應(yīng)用程序可與使用其他語(yǔ)言(比如 Java 或 PHP)編寫(xiě)的應(yīng)用程序共享信息。共享內(nèi)存在針對(duì)大部分語(yǔ)言的實(shí)現(xiàn)中得到了廣泛使用,所以訪問(wèn)應(yīng)該不是問(wèn)題。要理解信息,我們可以使用一種標(biāo)準(zhǔn)格式,比如 XML 或 JSON。
共享內(nèi)存的使用是一種在進(jìn)程之間交換數(shù)據(jù)的快速方法,主要因?yàn)樵趧?chuàng)建內(nèi)存段之后傳遞數(shù)據(jù),不會(huì)涉及內(nèi)核。這種方法常常稱為進(jìn)程間通信 (IPC)。其他 IPC 方法包括管道、消息隊(duì)列、RPC 和套接字。當(dāng)使用需要彼此通信的應(yīng)用程序的生態(tài)系統(tǒng)時(shí),這種在應(yīng)用程序之間快速、可靠地交換數(shù)據(jù)的能力非常有用。取決于生態(tài)系統(tǒng)的大小,使用數(shù)據(jù)庫(kù)在應(yīng)用程序之間交換信息的常用方法常常會(huì)導(dǎo)致查詢緩慢,甚至 I/O 阻塞。使用共享內(nèi)存,沒(méi)有 I/O 會(huì)減緩開(kāi)發(fā)人員的進(jìn)度。
共享內(nèi)存并未提供同步機(jī)制,也就是說(shuō),在第一個(gè)進(jìn)程結(jié)束對(duì)共享內(nèi)存的寫(xiě)操作之前,并無(wú)自動(dòng)機(jī)制可以阻止第二個(gè)進(jìn)程開(kāi)始對(duì)它進(jìn)行讀取。所以我們通常需要用其他的機(jī)制來(lái)同步對(duì)共享內(nèi)存的訪問(wèn)。
本文的提議非常簡(jiǎn)單,學(xué)習(xí)如何使用 PHP 創(chuàng)建和操作共享內(nèi)存段,使用它們存儲(chǔ)可供其他應(yīng)用程序使用的數(shù)據(jù)集。即使沒(méi)有使用共享內(nèi)存交換數(shù)據(jù)的計(jì)劃,它本身也在許多好處,因?yàn)樗箲?yīng)用程序能夠遠(yuǎn)離 I/O 問(wèn)題。將數(shù)據(jù)集直接存儲(chǔ)在內(nèi)存中具有諸多優(yōu)勢(shì),從 Web 服務(wù)數(shù)據(jù)緩存到會(huì)話共享。它是一個(gè)非常有用的概念,每個(gè) PHP 開(kāi)發(fā)人員都應(yīng)該知道。
使用共享內(nèi)存的優(yōu)缺點(diǎn)
1、優(yōu)點(diǎn):我們可以看到使用共享內(nèi)存進(jìn)行進(jìn)程間的通信真的是非常方便,而且函數(shù)的接口也簡(jiǎn)單,數(shù)據(jù)的共享還使進(jìn)程間的數(shù)據(jù)不用傳送,而是直接訪問(wèn)內(nèi)存,也加快了程序的效率。同時(shí),它也不像匿名管道那樣要求通信的進(jìn)程有一定的父子關(guān)系。
2、缺點(diǎn):共享內(nèi)存沒(méi)有提供同步的機(jī)制,這使得我們?cè)谑褂霉蚕韮?nèi)存進(jìn)行進(jìn)程間通信時(shí),往往要借助其他的手段來(lái)進(jìn)行進(jìn)程間的同步工作。
我們可以使用共享內(nèi)存作為一種獨(dú)特的存儲(chǔ)選項(xiàng),提供快速讀/寫(xiě)操作和進(jìn)程互操作性等優(yōu)勢(shì)。對(duì)于 Web 應(yīng)用程序,這意味著:
緩存存儲(chǔ)(數(shù)據(jù)庫(kù)查詢、Web 服務(wù)數(shù)據(jù)、外部數(shù)據(jù))
會(huì)話存儲(chǔ)
應(yīng)用程序之間的數(shù)據(jù)交換
此存儲(chǔ)技術(shù)不僅對(duì)緩存有用,也對(duì)應(yīng)用程序之間的數(shù)據(jù)交換也有用,只要數(shù)據(jù)以兩端都可讀的格式存儲(chǔ)。不要低估共享內(nèi)存在 Web 應(yīng)用程序中的力量。可采用許多不同的方式來(lái)巧妙地實(shí)現(xiàn)這種存儲(chǔ),惟一的限制是開(kāi)發(fā)人員的創(chuàng)造力和技能。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/62002.html
摘要:共享內(nèi)存的使用是一種在進(jìn)程之間交換數(shù)據(jù)的快速方法,主要因?yàn)樵趧?chuàng)建內(nèi)存段之后傳遞數(shù)據(jù),不會(huì)涉及內(nèi)核。使用共享內(nèi)存,沒(méi)有會(huì)減緩開(kāi)發(fā)人員的進(jìn)度。不要低估共享內(nèi)存在應(yīng)用程序中的力量。 共享內(nèi)存是一種在相同機(jī)器中兩個(gè)正在運(yùn)行的進(jìn)程之間共享和傳遞數(shù)據(jù)的有效方式,不同進(jìn)程之間共享的內(nèi)存通常安排為同一段物理內(nèi)存;顧名思義,共享內(nèi)存就是允許兩個(gè)不相關(guān)的進(jìn)程訪問(wèn)同一個(gè)邏輯內(nèi)存。一個(gè)進(jìn)程可創(chuàng)建一個(gè)可供其他進(jìn)...
摘要:請(qǐng)注意,此函數(shù)返回一個(gè)編號(hào),其他函數(shù)可使用該編號(hào)操作該共享內(nèi)存段。從內(nèi)存段讀取數(shù)據(jù)從共享內(nèi)存段讀取數(shù)據(jù)很簡(jiǎn)單。函數(shù)將該內(nèi)存段標(biāo)記為刪除,阻止任何其他進(jìn)程打開(kāi)它。 在之前的一篇博客[了解一下共享內(nèi)存的概念及優(yōu)缺點(diǎn)]已經(jīng)對(duì)共享內(nèi)存的概念做了說(shuō)明。下面就來(lái)簡(jiǎn)單使用共享內(nèi)存(其實(shí)也可以用其他工具,比如redis) PHP做內(nèi)存共享有兩套接口。一個(gè)是shm,它實(shí)際上是變量共享,會(huì)把對(duì)象變量序列化...
摘要:請(qǐng)注意,此函數(shù)返回一個(gè)編號(hào),其他函數(shù)可使用該編號(hào)操作該共享內(nèi)存段。從內(nèi)存段讀取數(shù)據(jù)從共享內(nèi)存段讀取數(shù)據(jù)很簡(jiǎn)單。函數(shù)將該內(nèi)存段標(biāo)記為刪除,阻止任何其他進(jìn)程打開(kāi)它。 在之前的一篇博客[了解一下共享內(nèi)存的概念及優(yōu)缺點(diǎn)]已經(jīng)對(duì)共享內(nèi)存的概念做了說(shuō)明。下面就來(lái)簡(jiǎn)單使用共享內(nèi)存(其實(shí)也可以用其他工具,比如redis) PHP做內(nèi)存共享有兩套接口。一個(gè)是shm,它實(shí)際上是變量共享,會(huì)把對(duì)象變量序列化...
閱讀 2508·2021-11-24 09:39
閱讀 3553·2019-08-30 15:53
閱讀 631·2019-08-29 15:15
閱讀 2936·2019-08-26 13:23
閱讀 3259·2019-08-26 10:48
閱讀 679·2019-08-26 10:31
閱讀 808·2019-08-26 10:30
閱讀 2393·2019-08-23 18:32