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 版本的詳細內容,更多請關注TW511.COM其它相關文章!