多進程命名管通通訊【無血緣關係進程】PHP 版本

藏色散人
發布: 2023-04-07 17:32:01
轉載
2338 人瀏覽過

進程通訊:

1、中斷系統

2、無名管道【半雙工通訊】

只能用於父子進程,兄弟進程之間的通信,且沒有名字,稱為無名管道,傳輸的資料是無格式的,雙方可自行定義格式,不依賴檔案系統。

推薦:《PHP教學

3、命名管道

用於無名管道無法實現的騷操作,沒任何關係的進程也能進行通訊【就是依賴一個文件描述符,只不過這文件是一個FIFO 類型的文件即管道文件,遵守FIFO 原則,即隊列先進先出】

PS:務必了解進程阻塞,非阻塞原理,管道文件,進程【運行狀態轉移】

應用場景舉例說明: 如使用php 的socket API 編寫一個類似workerman 的網絡框架,可以做統一中斷信號事件處理

#中斷處理程序只負責接受中斷請求,透過管道寫端寫入數據,主程序透過監聽文件描述符上的事件【可讀事件【可以私下去擼一下stream socket 相關API,以及了解下IO 復用函數的使用方法】再處理。不會讓中斷處理程序等待過長的時間。

當然透過命名管道也可以實現跨語言進程間的通訊。

$filePath = $argv[1];
if (posix_mkfifo($filePath,0666)<0){
    fprintf(STDOUT,"命名管道创建错误");
    exit(0);
}
$fd = fopen($filePath,"w");
while (is_resource($fd)){
    fprintf(STDOUT,">");
    $data = fgets(STDIN);
    if ($data){
        fwrite($fd,$data,strlen($data));
    }
}
exit(0);
登入後複製
$filePath = $argv[1];
if (posix_mkfifo($filePath,0666)<0){
    fprintf(STDOUT,"命名管道创建错误");
    exit(0);
}
$fd = fopen($filePath,"r");
while (is_resource($fd)){
    $data = fgets($fd);
    if ($data){
        fwrite(STDIN,$data,strlen($data));
    }
}
exit(0);
登入後複製

以上是多進程命名管通通訊【無血緣關係進程】PHP 版本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板