摘要:一進(jìn)程間通信理解間進(jìn)程通信機(jī)制,先了解下進(jìn)程間有哪些通訊機(jī)制歷史發(fā)展按照歷史來源主要有兩大塊的管道,,信號的消息隊列,共享內(nèi)存,信號燈。信號量主要作為進(jìn)程間,以及進(jìn)程內(nèi)部線程之間的通訊手段。主要依賴,兼容擴(kuò)展實現(xiàn)方式的進(jìn)程間通信之消息隊列。
一、linux進(jìn)程間通信PHP間進(jìn)程如何通信,PHP相關(guān)的服務(wù)的IPC是實現(xiàn)方式,IPC的思想如何用到項目中。
理解php間進(jìn)程通信機(jī)制,先了解下linux進(jìn)程間有哪些通訊機(jī)制
1.1 歷史發(fā)展linux ipc 按照歷史來源主要有兩大塊
AT&T的system v IPc:管道,F(xiàn)IFO,信號
BSD的socket Ipc :消息隊列,共享內(nèi)存,信號燈。
1.2 主要方式總結(jié)起來主要有以下六種方式
1:管道【pipe】:主要是有關(guān)系的進(jìn)程之間的通訊,例如ls xx |grep xx。
2:信號【signal】:通過中間進(jìn)程來管理進(jìn)程之間的通訊,屬于比較復(fù)雜的進(jìn)程間通訊方式。
3:消息隊列【message】:消息的鏈接表,進(jìn)程生產(chǎn)和消費消費消息隊列。
優(yōu)勢:克服了信號量承載的消息少,管道只能用規(guī)定的字節(jié)流,同時受到緩沖區(qū)大小的約束的問題 (而且讀寫是有隊列的,有一個寫,就只有一個能讀到,比較簡單,不需要同步和互斥)
缺點:太過簡單,處理復(fù)雜情況可能會造成饑餓現(xiàn)象
4:共享內(nèi)存。多個進(jìn)程訪問同一個內(nèi)存區(qū)。最快的IPC方式,但是需要處理進(jìn)程間的同步和互斥。 同時也是當(dāng)下使用最廣泛的IPC,例如nginx,框架通訊,配置中心都是該原理。
5:信號量【semaphore】:主要作為進(jìn)程間,以及進(jìn)程內(nèi)部線程之間的通訊手段。nginx早起的channel機(jī)制就類似于信號量
6:套接字【socket】:不同機(jī)器之間的通訊手段。處于tcp-》socket-》http之間的一個協(xié)議。
二、php進(jìn)程通訊有哪些方式最好的語言php有哪些IPC的方式
pcntl擴(kuò)展:主要的進(jìn)程擴(kuò)展,完成進(jìn)程的創(chuàng)建,子進(jìn)程的創(chuàng)建,也是當(dāng)前使用比較廣的多進(jìn)程。
posix擴(kuò)展:完成posix兼容機(jī)通用api,如獲取進(jìn)程id,殺死進(jìn)程等。主要依賴 IEEE 1003.1 (POSIX.1) ,兼容posix
sysvmsg擴(kuò)展:實現(xiàn)system v方式的進(jìn)程間通信之消息隊列。
sysvsem擴(kuò)展:實現(xiàn)system v方式的信號量。
sysvshm擴(kuò)展:實現(xiàn)system v方式的共享內(nèi)存。
sockets擴(kuò)展:實現(xiàn)socket通信,跨機(jī)器,跨平臺。
php也有一些封裝好的異步進(jìn)程處理框架:例如swoole,workman等
三、與php相關(guān)的IPC 3.1 nginx的IPCnginx的ipc主要有兩種:
早期:channel 機(jī)制:類似于信號,標(biāo)示不同進(jìn)程以及進(jìn)程與子進(jìn)程之間的套接字,同時具有繼承關(guān)系。
缺點:過于復(fù)雜,也產(chǎn)生了過多的套接字,造成存儲浪費。
當(dāng)前主流:共享內(nèi)存方式:快,寫入數(shù)據(jù)少,方便。
3.2 apache的IPC具體可以參見這篇文章:寫的非常好 https://rocfang.gitbooks.io/d...
apache:https://arrow.apache.org/docs...
四、實際應(yīng)用中的IPC在平時的項目中,類似于php和linux的IPC的思想大量存在,深入理解。
socket方式:不同項目間通訊,跨機(jī)微服務(wù)等等,也是使用最廣泛的IPC。
共享內(nèi)存方式:配置中心,公共數(shù)據(jù)庫,甚至git都可以看做共享內(nèi)存的衍生;`共享內(nèi)存就必須要注意同步和互斥。
cache :是共享內(nèi)存和管道結(jié)合的思想
項目流式架構(gòu):管道的方式,可以大量的節(jié)省空間和時間的通訊方式。
【轉(zhuǎn)載請注明:php進(jìn)程通信 | 靠譜崔小拽 】
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/23157.html
摘要:深入?yún)f(xié)議從功能上來講,協(xié)議已經(jīng)完全能夠解決服務(wù)器與應(yīng)用之間的數(shù)據(jù)通信問題。消息頭信息主要的消息頭信息如下用于表示協(xié)議版本號。從服務(wù)器發(fā)送到應(yīng)用,表示中止一個處理中的請求。另外我們還需要明確一點就是服務(wù)器與進(jìn)程間通信是無序的。 本文首發(fā)于 深入剖析 Web 服務(wù)器與 PHP 應(yīng)用之間的通信機(jī)制 - 掌握 CGI 和 FastCGI 協(xié)議的運行原理,轉(zhuǎn)載請注明出處! 身為一名使用 PHP ...
摘要:介紹協(xié)議與協(xié)議每種動態(tài)語言等的代碼文件需要通過對應(yīng)的解析器才能被服務(wù)器識別,而協(xié)議就是用來使解釋器與服務(wù)器可以互相通信。而這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。在各自的配置文件里設(shè)置用戶通過以上配置即可完成與的通信。 PHP-FPM 介紹 CGI 協(xié)議與 FastCGI 協(xié)議每種動態(tài)語言( PHP,Python 等)的代碼文件需要通過對應(yīng)的解析器才能被服務(wù)器識別,而...
摘要:介紹協(xié)議與協(xié)議每種動態(tài)語言等的代碼文件需要通過對應(yīng)的解析器才能被服務(wù)器識別,而協(xié)議就是用來使解釋器與服務(wù)器可以互相通信。而這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。在各自的配置文件里設(shè)置用戶通過以上配置即可完成與的通信。 PHP-FPM 介紹 CGI 協(xié)議與 FastCGI 協(xié)議每種動態(tài)語言( PHP,Python 等)的代碼文件需要通過對應(yīng)的解析器才能被服務(wù)器識別,而...
摘要:而這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。在各自的配置文件里設(shè)置用戶通過以上配置即可完成與的通信。個人總結(jié),若有不對,敬請指正 PHP-FPM 介紹 CGI 協(xié)議與 FastCGI 協(xié)議 每種動態(tài)語言( PHP,Python 等)的代碼文件需要通過對應(yīng)的解析器才能被服務(wù)器識別,而 CGI 協(xié)議就是用來使解釋器與服務(wù)器可以互相通信。PHP 文件在服務(wù)器上的解析需要用到 ...
摘要:而這樣的面向連接的協(xié)議,可以更好的保證通信的正確性和完整性。在各自的配置文件里設(shè)置用戶通過以上配置即可完成與的通信。個人總結(jié),若有不對,敬請指正 PHP-FPM 介紹 CGI 協(xié)議與 FastCGI 協(xié)議 每種動態(tài)語言( PHP,Python 等)的代碼文件需要通過對應(yīng)的解析器才能被服務(wù)器識別,而 CGI 協(xié)議就是用來使解釋器與服務(wù)器可以互相通信。PHP 文件在服務(wù)器上的解析需要用到 ...
閱讀 2240·2021-09-07 09:58
閱讀 3421·2019-08-30 14:07
閱讀 1328·2019-08-29 12:32
閱讀 694·2019-08-29 11:06
閱讀 3720·2019-08-26 18:18
閱讀 3760·2019-08-26 17:35
閱讀 1403·2019-08-26 11:35
閱讀 637·2019-08-26 11:35