国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

進程間通信

Richard_Gao / 856人閱讀

摘要:接受不到消息消息隊列通過指定而被創建后,任意一方銷毀了該隊列,都會導致其他發送或接收方失敗。用法場景進程,中代碼段要用到中代碼段的結果。完成了進程間同步問題此外進程間通信采用的方式是共享內存。

參考文章

深刻理解Linux進程間通信(IPC)

進程間通信(IPC)介紹

php高級應用之進程控制及進程間通訊 workman 作者發布

PHP 相關進程間通信擴展
-- System V IPC:

sysvmsg 消息隊列
sysvsem 信號量
sysvshm 共享內存


-- BSD IPC

socket(stream)

-- POSIX IPC
posix 信號量
posix 共享內存
posix 消息隊列
sysvmsg(消息隊列)

php ftok 函數作用解析

php ftok 參數2坑!

用途:

解決進程間通信問題

用法:

發送方(send.php)

$key = 1;

$msg = "發送方發送的消息";

$q = msg_get_queue($key);

$send = msg_send($q , 1 , $msg , true , true);

if ($send) {
    echo "消息發送成功" . PHP_EOL;
} else {
    echo "消息發送失敗" . PHP_EOL;
}

接收方(receive.php

$key = 1;

$q = msg_get_queue($key);

/**
 * 第二個參數解釋:
    < 0 ,小于該絕對值的最小類型隊列上的第一條記錄
        例如我設置了 -5,絕對值 5
        該消息隊列的消息類型有 2 3 4 5 6 7
        則返回類型為 2 的消息隊列上的第一條記錄
    0 則獲取隊列第一條消息(不管消息類型,標識符)
    1 獲取設置類型下的第一條消息
    
    第三個參數必須是個變量!(坑爹的貨!)
 */
msg_receive($q , 1 , $msg_type , 1024 , $msg , true , MSG_NOERROR , $error_code);
錯誤處理

無權限訪問

有可能你會碰到訪問無權限訪問隊列的情況。那是因為你的代碼長這樣。我也忘了是怎樣修復的,后面自動好了。

接受不到消息

消息隊列通過指定 key 而被創建后,任意一方銷毀了該隊列,都會導致其他發送 或 接收方失敗。

信號量(sysvsem) + 共享內存(sysvshm) 用途:

注意了:解決進程間同步問題。

用法

場景:進程 A 、B、C,B 中代碼段 y 要用到 A 中代碼段 x 的結果。C 中代碼段 m 要用到 B 中代碼段 y 的結果。

$key = ftok(__FILE__ , 1);

$shm = shm_attach($key);

create(3 , [
    // 進程 A
    function($index) use($key , $shm){
       $sem_id = sem_get($key);
       
       // 獲取信號量!(其他相同獲取該信號量的進程等待,直到該信號量被釋放為止)
       sem_acquire($sem_id);
       
        // x 處理語句
       shm_put_var($shm , 1 , 10);
       
       $wait = 3;
       $count = 1;
       
       while ($count >= $wait)
       {
           echo "進程 A 等待處理" . $count++ . "s" . PHP_EOL;
           
           sleep(1);
       }
       
       // 3s 后釋放信號量
       sem_release($shm);
       
    } , 
    // 進程 B
    function($index) use($key , $shm){ 
       $sem_id = sem_get($key);
       
        // 獲取信號量!(其他相同獲取該信號量的進程等待,直到該信號量被釋放為止)
       sem_acquire($sem_id);
       
        // x 處理語句返回結果
        $x = shm_get_var($shm , 1);
        $y = $x + 11;
        
        shm_put_var($shm , 2 , $y);
       
        $wait = 5;
        $count = 1;
       
        while ($count >= $wait)
        {
           echo "進程 B 等待處理" . $count++ . "s" . PHP_EOL;
           
           sleep(1);
        }
        
        // 5s 后釋放信號量
        sem_release($shm);
    } , 
    // 進程 C
    function($index) use($key , $shm){
        $sem_id = sem_get($key);
       
        // 獲取信號量!(其他相同獲取該信號量的進程等待,直到該信號量被釋放為止)
       sem_acquire($sem_id);
       
        // x 處理語句返回結果
        $y = shm_get_var($shm , 2);
        $c = $x + 12;
        
        echo "獲取到結果:" . $c;
        
        // 刪除共享內存段
        sem_remove($shm);
    } , 
];

解釋:A 首先獲取到信號量,然后等待 3s 后釋放,期間 B、C在調用 sem_acquire 后阻塞,直到獲取到該信號量為止。A 釋放信號量后,B 現獲取,然后阻塞 5s 釋放,最后 C 獲取,執行。完成了進程間同步問題!此外進程間通信采用的方式是共享內存。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30646.html

相關文章

  • PHP進程通信

    摘要:一進程間通信理解間進程通信機制,先了解下進程間有哪些通訊機制歷史發展按照歷史來源主要有兩大塊的管道,,信號的消息隊列,共享內存,信號燈。信號量主要作為進程間,以及進程內部線程之間的通訊手段。主要依賴,兼容擴展實現方式的進程間通信之消息隊列。 PHP間進程如何通信,PHP相關的服務的IPC是實現方式,IPC的思想如何用到項目中。 一、linux進程間通信 理解php間進程通信機制,先了解...

    haobowd 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<