校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > PHP共享內存使用與信號控制實例分析

PHP共享內存使用與信號控制實例分析

熱門標簽:長沙做地圖標注公司 四川保險智能外呼系統供應商 遼寧ai電銷機器人價格 電話機器人銷售主要負責什么 福建銀行智能外呼系統價格 上海做外呼線路的通信公司 地圖標注專員怎么樣 寧波外呼營銷系統 房產中介用的是什么外呼系統

本文實例講述了PHP共享內存使用與信號控制。分享給大家供大家參考,具體如下:

共享內存

共享內存的使用主要是為了能夠在同一臺機器不同的進程中共享一些數據,比如在多個 php-fpm 進程中共享當前進程的使用情況。這種通信也稱為進程間通信(Inter-Process Communication),簡稱 IPC。

PHP 內置的 shmop 擴展 (Shared Memory Operations) 提供了一系列共享內存操作的函數(可能是用的人不多吧,這一塊兒的文檔還沒有中文翻譯)。在 Linux 上,這些函數直接是通過調用 shm* 系列的函數實現,而 Winodows 上也通過對系統函數的封裝實現了同樣的調用。

主要函數:

shmop_close — 關閉共享內存塊

shmop_delete — 刪除共享內存塊

shmop_open — 創建或打開共享內存塊

shmop_read — 從共享內存塊中讀取數據

shmop_size — 獲取共享內存塊的大小

shmop_write — 向共享內存塊中寫入數據

與此相關的還有一個很重要的函數:ftok,通過文件的 inode 信息(*nix 上通過 stat 或 ls -i 命令查看)創建 IPC 的唯一 key(文件/文件夾的 inode 是唯一的)。這個函數在 Linux 上也是直接調用同名的系統函數實現,Windows 上還是使用一些封裝。

一個簡單的計數例子:

?php
# 創建一塊共享內存
$shm_key = ftok(__FILE__, 't');
$shm_id = shmop_open($shm_key, 'c', 0644, 8);
# 讀取并寫入數據
$count = (int) shmop_read($shm_id, 0, 8) + 1;
shmop_write($shm_id, str_pad($count, 8, '0', STR_PAD_LEFT), 0);
// echo shmop_read($shm_id, 0, 8);
# 關閉內存塊,并不會刪除共享內存,只是清除 PHP 的資源
shmop_close($shm_id);

以上這段代碼沒執行一次計數加 1,而且數據是在不同進程之間共享的。也就是說除非手動刪除這塊內存使用,否則這個數據是不會重置的。

有個需要稍微注意的點:shmop_open 的第二個參數是個 flag,類似 fopen 的第二個參數,其取值有以前幾個:

"a" 只讀訪問;

"c" 如果內存片段不存在,則創建,如果存在,則可讀寫;

"w" 讀寫;

"n" 創建新的內存片段,如果同樣 key 的已存在,則會創建失敗,這是為了安全使用共享內存考慮。

此外,由于使用的共享內存片段是固定長度的,在存儲和讀取的時候要計算好數據的長度,不然可能會寫入失敗或者讀取空值。

信號控制

既然上面使用到了共享內存存儲數據,就需要考慮是否有多個進程同時寫入數據到共享內存的情況,是否需要避免沖突。如果是這樣,就需要引入信號量進行控制。

PHP 也提供了類似的內置擴展 sysvsem(這個擴展在 Windows 環境下沒有,文檔中將 ftok 函數也歸到這個擴展中,但實際上ftok 是在標準函數庫中提供的,所以在 Windows 下也是可用的)。

在說信號量控制之前,先說另外一件有意思的事情:看官方文檔你會發現這里同樣也有共享內存操作的函數(shm_*),因為這其實是同一類別(或者說來自于同一作者)的三個擴展,還有一個是 sysvmsg(隊列消息) 。函數的實現上稍有差別,但實際做的事情基本相同。這和上文的 shmop 擴展有什么區別呢?shmop 源碼下的 README 文件有簡單的說明:

PHP already had a shared memory extension (sysvshm) written by Christian Cartus cartus@atrior.de>, unfortunately this extension was designed with PHP only in mind and offers high level features which are extremely bothersome for basic SHM we had in mind.

簡單說來:sysvshm 擴展提供的方法并不是原封不動的存儲用戶的數據,而是先使用 PHP 的變量序列化函數對參數進行序列化然后再進行存儲。這就導致通過這些方法存儲的數據無法和非 PHP 進程共享。不過這樣也能存儲更豐富的 PHP 數據類型,上文的擴展中 shmop_write 只能寫入字符串。那么為什么 sysvshm 同樣不支持 Windows 呢?因為其并沒有引入封裝了 shm* 系列函數的tsrm_win32.h 的頭文件。

引入信號控制之后的示例:

?php
$id_key = ftok(__FILE__, 't');
$sem_id = sem_get($id_key);
# 請求信號控制權
if (sem_acquire($sem_id)) {
  $shm_id = shmop_open($id_key, 'c', 0644, 8);
  # 讀取并寫入數據
  $count = (int) shmop_read($shm_id, 0, 8) + 1;
  shmop_write($shm_id, str_pad($count, 8, '0', STR_PAD_LEFT), 0);
  // echo shmop_read($shm_id, 0, 8);
  # 關閉內存塊
  shmop_close($shm_id);
  # 釋放信號
  sem_release($sem_id);
}

但是本地想模擬實現寫入沖突實際上是非常難的(考慮到計算機的執行速度)。在本地測試中,使用 for 循環操作時如果不使用shmop_close 關閉資源會出現無法打開共享內存的錯誤警告。這應該是因為正在共享內存被上一次操作占用中還沒有釋放導致。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP基本語法入門教程》、《PHP錯誤與異常處理方法總結》、《php程序設計算法總結》及《php面向對象程序設計入門教程》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • PHP進程通信基礎之信號量與共享內存通信
  • PHP共享內存用法實例分析
  • 單臺服務器的PHP進程之間實現共享內存的方法
  • php共享內存段示例分享
  • php使用shmop函數創建共享內存減少負載的方法

標簽:工商登記 深圳 澳門 常德 佛山 延安 宿遷 宜春

巨人網絡通訊聲明:本文標題《PHP共享內存使用與信號控制實例分析》,本文關鍵詞  PHP,共享,內存,使用,與,信號,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP共享內存使用與信號控制實例分析》相關的同類信息!
  • 本頁收集關于PHP共享內存使用與信號控制實例分析的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲美女区一区| 日韩午夜三级在线| 亚洲精品中文在线影院| 色综合一区二区| 亚洲福利视频导航| 6080亚洲精品一区二区| 日本午夜精品一区二区三区电影| 欧美精品xxxxbbbb| 久久精品国产秦先生| 久久精品欧美一区二区三区麻豆| 成人免费毛片片v| 一区二区三区四区中文字幕| 欧美日韩国产一二三| 免费看日韩精品| 国产亚洲女人久久久久毛片| 成人不卡免费av| 亚洲一本大道在线| 精品免费视频.| 99国产一区二区三精品乱码| 亚洲成人av福利| www久久精品| 91久久香蕉国产日韩欧美9色| 午夜欧美电影在线观看| 久久午夜国产精品| 欧美三日本三级三级在线播放| 久久精品国产久精国产爱| 亚洲日本电影在线| 日韩一二在线观看| 91浏览器入口在线观看| 久久99深爱久久99精品| 亚洲欧美自拍偷拍| 日韩久久久精品| 在线精品视频一区二区| 久久精品国产成人一区二区三区| 中文字幕在线不卡一区| 日韩一区二区在线免费观看| 成人在线综合网站| 蜜桃av一区二区| 亚洲免费大片在线观看| 日韩一级片网站| 欧美亚洲动漫精品| 成人一级视频在线观看| 日韩国产成人精品| 一区二区三区在线观看网站| 久久久久久久一区| 欧美精品乱人伦久久久久久| 色综合久久综合网| 国产91在线|亚洲| 久久99精品久久久久久国产越南| 久久99国产精品尤物| 亚洲美女在线国产| 中文字幕一区二区5566日韩| 精品国产一区二区三区四区四| 欧美日韩黄视频| 在线观看亚洲一区| www.性欧美| 成人丝袜18视频在线观看| 久久国产精品99久久久久久老狼 | 欧美在线一二三| 成人永久看片免费视频天堂| 国产一本一道久久香蕉| 理论电影国产精品| 日本麻豆一区二区三区视频| 午夜精品在线看| 亚洲国产成人tv| 亚洲一区二区三区免费视频| 亚洲色大成网站www久久九九| 国产亚洲精品超碰| 精品国一区二区三区| 欧美mv日韩mv亚洲| 欧美电影精品一区二区| 日韩一级免费观看| 日韩欧美国产综合一区 | 激情六月婷婷久久| 久久99深爱久久99精品| 经典三级在线一区| 精品在线观看视频| 国产精品一区二区在线观看网站| 久久精品国产精品亚洲红杏| 美女久久久精品| 国产在线播精品第三| 国产福利精品一区| 9色porny自拍视频一区二区| av不卡一区二区三区| 一本一道久久a久久精品综合蜜臀| 91色.com| 欧美日韩国产免费| 欧美一区二区啪啪| 精品粉嫩超白一线天av| 久久九九99视频| 国产精品免费久久久久| 亚洲你懂的在线视频| 亚洲福利视频一区| 麻豆国产欧美一区二区三区| 国产一区二区久久| 不卡欧美aaaaa| 欧美午夜电影一区| 日韩美女主播在线视频一区二区三区| 精品国产一区二区三区久久影院 | 亚洲国产一区在线观看| 亚洲综合色自拍一区| 喷白浆一区二区| 成人小视频免费在线观看| 精品国产凹凸成av人网站| 337p日本欧洲亚洲大胆精品| 亚洲国产精品成人综合色在线婷婷 | 亚洲免费资源在线播放| 丝袜美腿高跟呻吟高潮一区| 韩国午夜理伦三级不卡影院| 播五月开心婷婷综合| 欧美老年两性高潮| 欧美国产精品中文字幕| 亚洲成人免费视频| 国产一区二区精品在线观看| 在线观看精品一区| 久久婷婷国产综合精品青草| 亚洲欧美经典视频| 狠狠色丁香九九婷婷综合五月| 91视频观看视频| 2024国产精品| 亚洲成av人片在线| 国产成人鲁色资源国产91色综| 欧美性高清videossexo| 久久久精品国产免大香伊| 亚洲国产裸拍裸体视频在线观看乱了 | 欧美肥妇bbw| 自拍av一区二区三区| 麻豆91在线看| 欧美性生交片4| 国产精品午夜免费| 美女www一区二区| 欧美日韩在线播放| 日韩一区欧美一区| 国产一区二区三区四区五区入口| 欧美午夜免费电影| 亚洲日本免费电影| 丁香啪啪综合成人亚洲小说 | 国产精品视频第一区| 蜜桃av一区二区| 欧美日韩一区二区三区不卡| 国产精品久久夜| 国模大尺度一区二区三区| 欧美精品精品一区| 一区二区三区在线视频免费观看| 国产成人精品亚洲日本在线桃色| 欧美一区三区四区| 视频一区视频二区在线观看| 91网站在线观看视频| 欧美激情综合网| 韩国女主播成人在线| 日韩欧美亚洲国产另类| 视频在线观看一区| 欧美精品在线视频| 亚洲大片精品永久免费| 欧美中文字幕亚洲一区二区va在线| 中文字幕国产一区| 懂色av一区二区三区免费观看| 精品国产乱码久久| 国产在线不卡视频| 久久综合九色综合97婷婷女人| 美腿丝袜一区二区三区| 欧美一区二区三区精品| 99久久精品免费看国产免费软件| 国产女主播一区| 国产成人午夜电影网| 欧美激情综合在线| www.在线欧美| 亚洲欧美日韩久久精品| 欧美中文字幕一二三区视频| 亚洲午夜免费视频| 欧美一区二区三区色| 奇米影视7777精品一区二区| 日韩一区二区电影在线| 国内精品嫩模私拍在线| 国产亚洲精品免费| 99精品在线免费| 亚洲一区av在线| 制服丝袜日韩国产| 麻豆国产欧美日韩综合精品二区| 日韩精品一区二区三区蜜臀| 国产一区二区精品久久| 国产欧美一区二区精品婷婷| 成人app在线观看| 亚洲在线中文字幕| 欧美一卡二卡三卡| 精品一区二区免费在线观看| 国产三级精品在线| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲国产精品久久久久秋霞影院 | 亚洲国产精品成人久久综合一区| 播五月开心婷婷综合| 亚洲高清视频在线| 精品国产凹凸成av人网站| av激情亚洲男人天堂| 亚洲一二三专区| 精品国产三级a在线观看| av在线不卡网| 婷婷激情综合网| 久久日韩精品一区二区五区| 91影视在线播放|