PHP進程通訊

PHP間進程如何通訊,PHP相關的服務的IPC是實現方式,IPC的思想如何用到項目中。php

1、linux進程間通訊

理解php間進程通訊機制,先了解下linux進程間有哪些通信機制html

1.1 歷史發展

linux ipc 按照歷史來源主要有兩大塊linux

  • AT&T的system v IPc:管道,FIFO,信號nginx

  • BSD的socket Ipc :消息隊列,共享內存,信號燈。git

進程發展

1.2 主要方式

總結起來主要有如下六種方式數據庫

  • 1:管道【pipe】:主要是有關係的進程之間的通信,例如ls xx |grep xx。apache

  • 2:信號【signal】:經過中間進程來管理進程之間的通信,屬於比較複雜的進程間通信方式。api

  • 3:消息隊列【message】:消息的連接表,進程生產和消費消費消息隊列。swoole

    • 優點:克服了信號量承載的消息少,管道只能用規定的字節流,同時受到緩衝區大小的約束的問題 (並且讀寫是有隊列的,有一個寫,就只有一個能讀到,比較簡單,不須要同步和互斥)架構

    • 缺點:太過簡單,處理複雜狀況可能會形成飢餓現象

  • 4:共享內存。多個進程訪問同一個內存區。最快的IPC方式,可是須要處理進程間的同步和互斥。 同時也是當下使用最普遍的IPC,例如nginx,框架通信,配置中心都是該原理。

  • 5:信號量【semaphore】:主要做爲進程間,以及進程內部線程之間的通信手段。nginx早起的channel機制就相似於信號量

  • 6:套接字【socket】:不一樣機器之間的通信手段。處於tcp-》socket-》http之間的一個協議。

2、php進程通信有哪些方式

最好的語言php有哪些IPC的方式

  • pcntl擴展:主要的進程擴展,完成進程的建立,子進程的建立,也是當前使用比較廣的多進程。

  • posix擴展:完成posix兼容機通用api,如獲取進程id,殺死進程等。主要依賴 IEEE 1003.1 (POSIX.1) ,兼容posix

  • sysvmsg擴展:實現system v方式的進程間通訊之消息隊列。

  • sysvsem擴展:實現system v方式的信號量。

  • sysvshm擴展:實現system v方式的共享內存。

  • sockets擴展:實現socket通訊,跨機器,跨平臺。

php也有一些封裝好的異步進程處理框架:例如swoole,workman等

3、與php相關的IPC

3.1 nginx的IPC

nginx的ipc主要有兩種:

  • 早期:channel 機制:相似於信號,標示不一樣進程以及進程與子進程之間的套接字,同時具備繼承關係。
    缺點:過於複雜,也產生了過多的套接字,形成存儲浪費。

  • 當前主流:共享內存方式:快,寫入數據少,方便。

具體能夠參見這篇文章:寫的很是好 https://rocfang.gitbooks.io/d...

3.2 apache的IPC

apache:https://arrow.apache.org/docs...

4、實際應用中的IPC

在平時的項目中,相似於php和linux的IPC的思想大量存在,深刻理解。

  • socket方式:不一樣項目間通信,跨機微服務等等,也是使用最普遍的IPC。

  • 共享內存方式:配置中心,公共數據庫,甚至git均可以看作共享內存的衍生;`共享內存就必需要注意同步和互斥。

  • cache :是共享內存和管道結合的思想

  • 項目流式架構:管道的方式,能夠大量的節省空間和時間的通信方式。

【轉載請註明:php進程通訊 | 靠譜崔小拽

相關文章
相關標籤/搜索