PHP中進程間共享變量 shmop

類似於 asp中的 application 實現多用戶 的緩存共享

進程間共享變量

用戶在一個Web 應用 程序導航 時,如果能在Web服務器 上存儲用戶或會話的特定數據,從而每次請求網頁 時能很容易地訪問這些數據,將非常有用。存儲的可以 是有關用戶、用戶首選項的信息,或者是與應用程序相關的數據,如購物車中的數據。用戶每次請求包含session_start()函數調用的網頁時,服務 器會開始一個新進程(或重用一個空閒進程),PHP 引擎將在查詢字符串或cookie數據中查找一 個會話ID。這會獲取 到已保存的會話數據,並建立$_SESSION數 組。

技巧 10-5已經提到,$_SESSION是一個超全局 變量,可以從任何代碼 段直接訪問。如果會話是活動的,可以 從$_SESSION數組獲取、增加、更新和刪除值。這與處理任何其他變量是類似的。引擎會在腳本結束時自動保存數組的值,除非因爲錯誤異常中止。會話數 據文件 會鎖定,以避免多個進程同時訪問(寫)相同的數據。 如果腳本執行的時間 很長,或者要從同一個服務器加載多個幀,可以優化應 用程序,使用session_write_close()或session_commit()關閉會話數據文件。不論使用其中哪一個命令,之後都不能再 向$_SESSION數組增加新的值。

共享內存是在進程中共享數據的另一種辦法。兩個進程同時運行時(可能由不同的客戶啓動),就可以使用共享內存。在 大多數情況下,共享內存比共享文件或數據庫 表的速度更快。在PHP中使用共享內存時,必須使 用–enable–shmop參數編譯。

說明    使用共享內存時,要求進程是持久的,如Apache模塊、IIS ISAPI或PHP-GTK應用程序。

 

 

shmop擴 展實現了6個簡單函數,如表10-8所示。

表10-8  shmop函數

函  數  名

描    述

shmop_open()

打開或創建一個內存塊來共享

shmop_close()

關閉一個共享內存塊

shmop_delete()

刪除一個共享內存塊

shmop_read()

從一個共享內存塊讀取數據

shmop_write()

將數據寫到一個共享內存塊

shmop_size()

得到一個共享內存塊的大小

 

使用一個共享 內存塊之前必須先創建它。可以使用shmop_open()函數創建共享內存塊,這個函數取4個參數。第一個參數是一個唯一ID(一個整數),用於標識這 個內存塊。第二個參數是一個標誌,指定了要如何訪問這個塊(a = 只讀,c = 創建或讀/寫,w = 讀寫, n = 創建新塊或失敗)。第三個參數指定了內存塊的入口,像文件系統 權限一樣作爲一個八進制數傳入(如0644)。第四 個參數(也是最後一個)設置 了塊的大小。如果打開一個現有的塊,第三個和第四個 參數應當設置爲0。

說明    共享內存塊的大小在創建時就已經固定,而且不能再改變。

 

下面的例子顯 示瞭如何創建並寫入一個內存塊。這個塊將在腳本結束時刪除並關閉,所以爲了說明共享內存的工作原理,腳本會在終止前等待60秒。這段時間應該足夠運行下一 個例子並查看共享內存。

代碼

如果另一個進程還要使用這個內存塊,就不能將其刪除,另一個進程可以訪問這 個數據,如下所示:

工作原理

在兩個腳本間共享內存時,要求這兩個腳本同時運行。第一個腳本 用一個字符串定義了一個共享內存塊,並從這個塊中讀取6個字節。第二個腳本通過同一個句柄(0×123)連接到同一個塊,再讀取整個字符串併發送給客戶。

 

命令行查看
        ipcs -h for help.
[root@localhost html]# ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0x00000001 262144     root      644        4          0                      

[root@localhost html]#

可以看到,共享內存的key, shmid,所有者,權限,大小,attach數,和狀態。

刪除共享內存可以用ipcrm -m shmid或ipcrm -M shmkey命令來完成。

[root@localhost html]# ipcrm -M 0x00000001
[root@localhost html]# ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     

[root@localhost html]#

發佈了31 篇原創文章 · 獲贊 11 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章