摘要:是服務(wù)器如和處理程序之間的一種通信協(xié)議,它是與類(lèi)似的一種應(yīng)用層通信協(xié)議。注意它只是一種協(xié)議是一種多進(jìn)程模型,它由一個(gè)進(jìn)程和多個(gè)進(jìn)程組成。進(jìn)程主要通過(guò)三種不同的方式來(lái)管理進(jìn)程,分別是靜態(tài)模式動(dòng)態(tài)模式按需模式。
SAPI,特意去查了一下,它是 Server Application Programming Interface 的首字母縮寫(xiě),意思是服務(wù)器端應(yīng)用編程接口。
這是 PHP 內(nèi)核提供給外部調(diào)用其服務(wù)的接口,即外部系統(tǒng)可以通過(guò) SAPI 來(lái)調(diào)用 PHP 提供的編譯腳本、執(zhí)行腳本的服務(wù)。PHP 中實(shí)現(xiàn)的 SAPI 有很多,Cli、Fpm 是我們比較常見(jiàn)的。
圖片來(lái)源于網(wǎng)絡(luò)
接下來(lái)主要是討論下我們常見(jiàn)的 Cli、和 Fpm 是如何工作的。
Cli(Command Line Interface),即命令行接口,用于在命令行下執(zhí)行 PHP 腳本,就像 Shell 那樣,它是執(zhí)行 PHP 腳本最簡(jiǎn)便的一種方式。
Cli 是單進(jìn)程模式,處理完請(qǐng)求后就直接關(guān)閉了,生命周期先后經(jīng)歷 module startup、request startup、execute script、request shutdown、module shutdown,其執(zhí)行流程比較簡(jiǎn)單,關(guān)鍵的處理過(guò)程如下:
main()-> php_cli_startup()-> do_cli()-> php_module_shutdown()
Fpm(FastCGI Process Manager)是 PHP FastCGI 運(yùn)行模式的一個(gè)進(jìn)程管理器,從它的定義可以看出,F(xiàn)pm的核心功能是進(jìn)程管理。
FastCGI 是 Web 服務(wù)器(如Nginx、Apache)和處理程序之間的一種通信協(xié)議,它是與HTTP類(lèi)似的一種應(yīng)用層通信協(xié)議。
注意:它只是一種協(xié)議!
Fpm 是一種多進(jìn)程模型,它由一個(gè) master 進(jìn)程和多個(gè) worker 進(jìn)程組成。master 進(jìn)程啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè) socket,但是不會(huì)接收、處理請(qǐng)求,而是由 fork 出的 worker 子進(jìn)程完成請(qǐng)求的接收及處理。即 master 進(jìn)程管理 worker 進(jìn)程,而 worker 進(jìn)程才是真正的處理請(qǐng)求。
Fpm 在啟動(dòng)后首先會(huì)進(jìn)行 SAPI 的注冊(cè)操作;接著會(huì)進(jìn)入 PHP 生命周期的 module startup 階段,在這個(gè)階段會(huì)調(diào)用各個(gè)擴(kuò)展定義的 MINT 鉤子函數(shù)。然后會(huì)進(jìn)行一系列的初始化操作,最后 master、worker 進(jìn)程進(jìn)入不同的處理環(huán)節(jié)。
worder 進(jìn)程的生命周期如下圖:
圖片來(lái)源于網(wǎng)絡(luò)
其生命周期主要經(jīng)歷這幾個(gè)階段:等待請(qǐng)求、解析請(qǐng)求、請(qǐng)求初始化、執(zhí)行 PHP 腳本、關(guān)閉請(qǐng)求。
master 進(jìn)程主要通過(guò)三種不同的方式來(lái)管理 worder 進(jìn)程,分別是靜態(tài)模式(static)、動(dòng)態(tài)模式(dynamic)、按需模式(ondemand)。具體要使用哪種模式可以在conf配置中通過(guò)pm指定。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30902.html
摘要:將環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到子進(jìn)程子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息從同一連接返回。當(dāng)子進(jìn)程關(guān)閉連接時(shí),請(qǐng)求便告知處理完成。定義一個(gè)子進(jìn)程最多處理的請(qǐng)求數(shù),達(dá)到這個(gè)值,進(jìn)程自動(dòng)退出。 一、SAPI比較 1. SAPI 服務(wù)器應(yīng)用程序編程接口,就是服務(wù)器與編程語(yǔ)言之間交互的接口。比如Linux命令行執(zhí)行一段PHP代碼,其實(shí)是Linux shell通過(guò)PHP SAPI傳入一組參數(shù),zend...
摘要:接下來(lái)會(huì)對(duì)其中五個(gè)比較常見(jiàn)的運(yùn)行模式進(jìn)行說(shuō)明。模式是目前主流的服務(wù)運(yùn)行模式,擁有高效可靠的性能,推薦大家使用。由于微軟的排他性,只能運(yùn)行于環(huán)境。 SAPI 這里所說(shuō)的 PHP 運(yùn)行模式, 其實(shí)指的是 SAPI (Server Application Programming Interface,服務(wù)端應(yīng)用編程端口 )。SAPI 為 PHP 提供了一個(gè)和外部通信的接口, PHP 就是通過(guò)這...
摘要:和進(jìn)程的啟動(dòng)過(guò)程類(lèi)似,啟動(dòng)過(guò)程有種進(jìn)程角色啟動(dòng)進(jìn)程進(jìn)程和進(jìn)程。直到請(qǐng)求到來(lái),將連接賦值給對(duì)象的字段。注當(dāng)進(jìn)程執(zhí)行完后會(huì)再次調(diào)用函數(shù),準(zhǔn)備監(jiān)聽(tīng)新的請(qǐng)求。當(dāng)讀取到的時(shí),會(huì)調(diào)用函數(shù)對(duì)進(jìn)行解析,將中的以及存儲(chǔ)到結(jié)構(gòu)體中。 運(yùn)營(yíng)研發(fā)團(tuán)隊(duì) 季偉濱 一、前言 前幾天的工作中,需要通過(guò)curl做一次接口測(cè)試。讓我意外的是,通過(guò)$_POST竟然無(wú)法獲取到Content-Type是application...
摘要:的工作原理和生命周期是一門(mén)適用于開(kāi)發(fā)的動(dòng)態(tài)語(yǔ)言,它可以說(shuō)是一個(gè)用語(yǔ)言實(shí)現(xiàn)的包含大量組件的軟件框架。無(wú)論是哪種公眾模式,的工作原理都是一樣的,都是作為一種運(yùn)行。 PHP的工作原理和生命周期 php是一門(mén)適用于web開(kāi)發(fā)的動(dòng)態(tài)語(yǔ)言,它可以說(shuō)是一個(gè)用C語(yǔ)言實(shí)現(xiàn)的包含大量組件的軟件框架。那么,php是如何工作的呢?它的生命周期是怎么樣的呢? 表層分析 php是以請(qǐng)求/響應(yīng)為周期運(yùn)行服務(wù)端應(yīng)用...
閱讀 2123·2021-11-02 14:48
閱讀 2790·2019-08-30 14:19
閱讀 2960·2019-08-30 13:19
閱讀 1334·2019-08-29 16:17
閱讀 3279·2019-08-26 14:05
閱讀 3020·2019-08-26 13:58
閱讀 3106·2019-08-23 18:10
閱讀 1133·2019-08-23 18:04