首頁 >後端開發 >PHP問題 >php進程間通訊有幾種方式

php進程間通訊有幾種方式

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼原創
2019-09-25 15:46:534391瀏覽

php進程間通訊有幾種方式

進程間通訊就是在不同進程之間傳播或交換訊息,那麼不同進程之間存在著什麼雙方都可以存取的介質呢?進程的使用者空間是互相獨立的,一般而言是不能互相存取的,唯一的例外是共享記憶體區。但是,系統空間是“公共場所”,所以核心顯然可以提供這樣的條件。除此之外,那就是雙方都可以訪問的周邊了。在這個意義上,兩個進程當然也可以透過磁碟上的普通檔案交換訊息,或透過「註冊表」或其它資料庫中的某些表項和記錄交換資訊。廣義上這也是進程間通訊的手段,但是一般都不把這算作「進程間通訊」。因為那些通訊手段的效率太低了,而人們對進程間通訊的要求是要有一定的即時性。

相關推薦:《php教學

Linux下進程間通訊的幾種主要手段:

1、管道(Pipe)及有名管道(named pipe)

管道可用於具有親緣關係進程間的通信,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係進程間的通訊。

管道包含三種:

(1)普通管道PIPE:通常有種限制,一是半雙工,只能單向傳輸;二是只能在父子進程間使用。

(2)流管道s_pipe:去除了第一種限制,可以雙向傳輸。

(3)命名管道name_pipe:去除了第二種限制,可以在許多不相關的程序之間進行通訊。

2、訊號(Signal)

訊號是比較複雜的通訊方式,用來通知接受行程有某種事件發生,除了用於行程間通訊外,進程還可以發送訊號給進程本身;Linux除了支援Unix早期訊號語義函數sigal外,還支援語意符合Posix.1標準的訊號函數sigaction(實際上,該函數是基於BSD的,BSD為了實現可靠訊號機制,又能夠統一對外接口,用sigaction函數重新實作了signal函數)。

3、封包(Message)佇列(訊息佇列)

#訊息佇列是訊息的連結表,包含Posix訊息佇列systemV訊息佇列。有足夠權限的進程可以為佇列中新增訊息,而被賦予讀取權限的進程則可以讀走佇列中的消息。訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

4、共享記憶體

使得多個行程可以存取同一塊記憶體空間,是最快的可用IPC形式。是針對其他通訊機制運作效率較低而設計的。往往與其它通訊機制,如信號量結合使用,來達到進程間的同步及互斥。

5、信號量(semaphore)

主要作為進程間以及同一進程不同執行緒之間的同步手段。

6、套介面(Socket)

更為一般的進程間通訊機制,可用來不同機器之間的進程間通訊。起初是由Unix系統的BSD分支開發出來的,但現在一般可以移植到其它類Unix系統上:Linux和System V的變種都支援套接字。

以上是php進程間通訊有幾種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn