PHP SAPI

sapi是PHP框架的接口層,它是進入PHP內部的入口,cli、fpm sapi是完整實現的應用程序。php

cli:html

     Command Line Interface 即命令行接口,用於在命令行下執行PHP腳本。cli是單進程模式,執行完請求後就直接關閉了。cli sapi的main函數位於sapi/cli/php_cli.c中。 內置web服務器,若是請求未指定執行哪一個PHP腳本,則默認執行目錄下的index.php 或index.html,若是這兩個文件都不存在則返回404nginx

 

fpm:golang

      FastCGI Process Manage 是PHP fastcgi 運行模式下的進程管理器,fastCGI是web服務區(nginx、apache)和處理程序之間的一種通訊協議,它只是一種協議,爲了讓PHP處理http請求,由於PHP並無像golang那也實現http網絡庫,而是實現了fastcgi協議,而後與web服務器配合實現了http的處理,web服務器來處理http請求,而後將解析的結果再經過fastcgi協議轉發給處理程序,處理程序執行完以後再將處理結果返回給web服務器,web服務器再返回給用戶。web

     PHP實現了fastcgi協議的處理,可是並無實現具體的網絡處理,比較常見的網絡處理模型:apache

     一、多進程模型:由一個主進程和多個子進程,主進程用來管理子進程,子進程用來處理基本的網絡事件,nginx就是這種模型。api

     二、多線程模型:由主線程接聽,接收請求,而後交給子線程處理,memcache就是這種模式。安全

     進程擁有獨立的地址空間和資源,而線程沒有,線程共享地址空間和資源,因此在資源管理上,多進程模型比較簡單,而多進程模型則須要考慮不一樣線程之間的資源衝突,也就是線程安全。服務器

     基本實現:網絡

     fpm是一種多進程模型,它由一個master主進程和多個work子進程組成,master進程啓動時會建立一個socket,可是不會接收、處理請求,而是由fork出來的多個work子進程進行接收、處理請求。

    master的主要工做是管理work子進程,好比當不少請求work進程處理不過來的時候,master進程會fork出來多個work進程進行出來,當沒有那麼多請求的時候,master進程會殺死部分空間的work進程,避免系統資源的浪費。

    fpm下不須要考慮併發致使的資源衝突

    fpm三種不一樣的進程管理方式:

     一、靜態模式

     二、動態模式

     三、按需模式

相關文章
相關標籤/搜索