成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP進(jìn)程間通信

verano / 468人閱讀

摘要:是用編寫的,因此它對系統(tǒng)底層的操作與很像,同大多數(shù)語言一樣,進(jìn)程間通信的方式有以下幾種消息隊列,管道,共享內(nèi)存,和信號。創(chuàng)建管道創(chuàng)建進(jìn)程,子進(jìn)程寫管道,父進(jìn)程讀管道通過函數(shù)創(chuàng)建一個子進(jìn)程。當(dāng)返回時表示創(chuàng)建進(jìn)程失敗。

PHP是用C編寫的,因此它對系統(tǒng)底層API的操作與C很像,同大多數(shù)語言一樣,PHP進(jìn)程間通信的方式有以下幾種:消息隊列,管道,共享內(nèi)存,socket和信號。本文是對這幾種通信方式對整理:

管道通信PIPE

管道用于承載簡稱之間的通訊數(shù)據(jù)。為了方便理解,可以將管道比作文件,進(jìn)程A將數(shù)據(jù)寫到管道P中,然后進(jìn)程B從管道P中讀取數(shù)據(jù)。php提供的管道操作API與操作文件的API基本一樣,除了創(chuàng)建管道使用posix_mkfifo函數(shù),讀寫等操作均與文件操作函數(shù)相同。當(dāng)然,你可以直接使用文件模擬管道,但是那樣無法使用管道的特性了。

通過管道通信的大概思路是,首先創(chuàng)建一個管道,然后子進(jìn)程向管道中寫入信息,父進(jìn)程從管道中讀取信息,這樣就可以做到父子進(jìn)程直接實現(xiàn)通信了。



消息隊列

消息隊列是存放在內(nèi)存中的一種隊列數(shù)據(jù)結(jié)構(gòu)。

 0) {
        unset($childList[$childPid]);
    }
}
echo "({$parentPid})main progress end!
";

運行結(jié)果:

create producer progresses: 21432
create producer progresses: 21433
create producer progresses: 21434
create consumer progresses: 21435
(21426) progress create! 2 | consumer(21435) destroy
(21424) progress create! 1 | consumer(21436) destroy
create consumer progresses: 21436
(21426) progress create! 3 | consumer(21436) destroy
(21426) progress create! 4 | consumer(21435) destroy
(21425) progress create! 3 | consumer(21436) destroy
(21424) progress create! 2 | consumer(21435) destroy
(21426) progress create! 5 | consumer(21435) destroy
(21424) progress create! 3 | consumer(21436) destroy
(21433)child progress end!
(21425) progress create! 4 | consumer(21435) destroy
(21424) progress create! 4 | consumer(21436) destroy
(21434)child progress end!
(21424) progress create! 5 | consumer(21435) destroy
(21425) progress create! 5 | consumer(21436) destroy
(21432)child progress end!
(21435)child progress end!
(21436)child progress end!
(21431)main progress end!

信號量與共享內(nèi)存
 0) {
        unset($childList[$childPid]);
    }
}

// 釋放共享內(nèi)存與信號量
shm_remove($shareMemory);
sem_remove($signal);
echo "({$parentPid}) main progress end!
";

運行結(jié)果:
使用信號量來實現(xiàn)共享內(nèi)存的鎖機(jī)制

parent progress pid:31720
create producer child progress: 31721 
create producer child progress: 31722 
(31721) count: 0
(31721) count: 1
(31721) count: 2
(31721) count: 3
(31721) count: 4
(31721) child progress end!
create producer child progress: 31723 
(31722) count: 5
(31722) count: 6
(31722) count: 7
(31722) count: 8
(31722) count: 9
(31722) child progress end!
(31723) count: 10
(31723) count: 11
(31723) count: 12
(31723) count: 13
(31723) count: 14
(31723) child progress end!
(31720) main progress end!

無鎖情況

Warning: sem_release(): SysV semaphore 4357894312 (key 0x73048925) is not currently acquired in /Users/easyboom/www/example/信號量與共享內(nèi)存.php on line 38

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25774.html

相關(guān)文章

  • PHP進(jìn)程通信

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

    haobowd 評論0 收藏0
  • 進(jìn)程通信

    摘要:接受不到消息消息隊列通過指定而被創(chuàng)建后,任意一方銷毀了該隊列,都會導(dǎo)致其他發(fā)送或接收方失敗。用法場景進(jìn)程,中代碼段要用到中代碼段的結(jié)果。完成了進(jìn)程間同步問題此外進(jìn)程間通信采用的方式是共享內(nèi)存。 參考文章 深刻理解Linux進(jìn)程間通信(IPC) 進(jìn)程間通信(IPC)介紹 php高級應(yīng)用之進(jìn)程控制及進(jìn)程間通訊 workman 作者發(fā)布 PHP 相關(guān)進(jìn)程間通信擴(kuò)展 -- System V ...

    Richard_Gao 評論0 收藏0
  • PHP進(jìn)程初探 --- 進(jìn)程通信二三事

    摘要:多進(jìn)程通信之一命名管道。多進(jìn)程通信之三信號量與共享內(nèi)存。共享內(nèi)存是最快是進(jìn)程間通信方式,因為個進(jìn)程之間并不需要數(shù)據(jù)復(fù)制,而是直接操控同一份數(shù)據(jù)。的一些書籍中甚至不建議新手輕易使用這種進(jìn)程間通信的方式,因為這是一種極易產(chǎn)生死鎖的解決方案。 [原文地址:https://blog.ti-node.com/blog...] 往往開啟多進(jìn)程的目的是為了一起干活加速效率,前面說了不同進(jìn)程之間的內(nèi)存...

    hearaway 評論0 收藏0
  • PHP進(jìn)程進(jìn)程通信

    摘要:擴(kuò)展完成兼容機(jī)通用如獲取進(jìn)程殺死進(jìn)程等。擴(kuò)展實現(xiàn)方式的進(jìn)程間通信之消息隊列。四進(jìn)程間通信通常中的進(jìn)程通信方式有消息隊列信號量共享內(nèi)存信號管道。下面這個例子中,父進(jìn)程等待秒鐘,向子進(jìn)程發(fā)送信號。子進(jìn)程捕獲信號,掉信號處理函數(shù)處理。 一、引言 進(jìn)程是一個具有獨立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運行活動。換句話說就是,在系統(tǒng)調(diào)度多個cpu的時候,一個程序的基本單元。進(jìn)程對于大多數(shù)的語言都不是...

    高勝山 評論0 收藏0

發(fā)表評論

0條評論

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