国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

(PHP7內(nèi)核剖析-1) CGI與FastCGI

rubyshen / 3441人閱讀

摘要:是與之間數(shù)據(jù)交換的一種協(xié)議。當收到這個請求后,會啟動對應(yīng)的程序,這里就是的解析器。接下來解析器會解析文件,初始化執(zhí)行環(huán)境,然后處理請求,再以規(guī)定規(guī)定的格式返回處理后的結(jié)果,退出進程,再把結(jié)果返回給瀏覽器。

CGI:是 Web Server 與 Web Application 之間數(shù)據(jù)交換的一種協(xié)議。
FastCGI:同 CGI,是一種通信協(xié)議,但比 CGI 在效率上做了一些優(yōu)化。
PHP-CGI:是 PHP (Web Application)對 Web Server 提供的 CGI 協(xié)議的接口程序。
PHP-FPM:是 PHP(Web Application)對 Web Server 提供的 FastCGI 協(xié)議的接口程序,額外還提供了相對智能一些任務(wù)管理

CGI工作流程

1.如果客戶端請求的是 index.html,那么Web Server會去文件系統(tǒng)中找到這個文件,發(fā)送給瀏覽器,這里分發(fā)的是靜態(tài)數(shù)據(jù)。

2.當Web Server收到 index.php 這個請求后,會啟動對應(yīng)的 CGI 程序,這里就是PHP的解析器。接下來PHP解析器會解析php.ini文件,初始化執(zhí)行環(huán)境,然后處理請求,再以規(guī)定CGI規(guī)定的格式返回處理后的結(jié)果,退出進程,Web server再把結(jié)果返回給瀏覽器。

FastCGI工作流程

1.如果客戶端請求的是 index.html,那么Web Server會去文件系統(tǒng)中找到這個文件,發(fā)送給瀏覽器,這里分發(fā)的是靜態(tài)數(shù)據(jù)。

2.當Web Server收到 index.php 這個請求后,FastCGI程序(FastCGI在啟動時就初始化執(zhí)行執(zhí)行環(huán)境,每個CGI進程池各個CGI進程共享執(zhí)行環(huán)境)在CGI進程池中選擇一個CGI進程處理請求,再以規(guī)定CGI規(guī)定的格式返回處理后的結(jié)果,繼續(xù)等待下一個請求。

PHP-FPM基本實現(xiàn)

1.PHP-FPM的實現(xiàn)就是創(chuàng)建一個master進程,在master進程中創(chuàng)建worker pool并讓其監(jiān)聽socket,然后fork出多個子進程(work),這些子進程各自accept請求,子進程的處理非常簡單,它在啟動后阻塞在accept上,有請求到達后開始讀取請求數(shù)據(jù),讀取完成后開始處理然后再返回,在這期間是不會接收其它請求的,也就是說PHP-FPM的子進程同時只能響應(yīng)一個請求,只有把這個請求處理完成后才會accept下一個請求

2.PHP-FPM的master進程與worker進程之間不會直接進行通信,master通過共享內(nèi)存獲取worker進程的信息,比如worker進程當前狀態(tài)、已處理請求數(shù)等,當master進程要殺掉一個worker進程時則通過發(fā)送信號的方式通知worker進程。

3.PHP-FPM可以同時監(jiān)聽多個端口,每個端口對應(yīng)一個worker pool,而每個pool下對應(yīng)多個worker進程

Worker工作流程

1.等待請求: worker進程阻塞在fcgi_accept_request()等待請求;
2.解析請求: fastcgi請求到達后被worker接收,然后開始接收并解析請求數(shù)據(jù),直到request數(shù)據(jù)完全到達;
3.請求初始化: 執(zhí)行php_request_startup(),此階段會調(diào)用每個擴展的:PHP_RINIT_FUNCTION();
4.編譯、執(zhí)行: 由php_execute_script()完成PHP腳本的編譯、執(zhí)行;
5.關(guān)閉請求: 請求完成后執(zhí)行php_request_shutdown(),此階段會調(diào)用每個擴展的:PHP_RSHUTDOWN_FUNCTION(),然后進入步驟(1)等待下一個請求。

Master進程管理

1.static: 這種方式比較簡單,在啟動時master按照pm.max_children配置fork出相應(yīng)數(shù)量的worker進程,即worker進程數(shù)是固定不變的

2.dynamic: 動態(tài)進程管理,首先在fpm啟動時按照pm.start_servers初始化一定數(shù)量的worker,運行期間如果master發(fā)現(xiàn)空閑worker數(shù)低于pm.min_spare_servers配置數(shù)(表示請求比較多,worker處理不過來了)則會fork worker進程,但總的worker數(shù)不能超過pm.max_children,如果master發(fā)現(xiàn)空閑worker數(shù)超過了pm.max_spare_servers(表示閑著的worker太多了)則會殺掉一些worker,避免占用過多資源,master通過這4個值來控制worker數(shù)

3.ondemand: 這種方式一般很少用,在啟動時不分配worker進程,等到有請求了后再通知master進程fork worker進程,總的worker數(shù)不超過pm.max_children,處理完成后worker進程不會立即退出,當空閑時間超過pm.process_idle_timeout后再退出

PHP-FPM事件管理器

1.sp[1]管道可讀事件:這個事件是master用于處理信號的

2.fpm_pctl_perform_idle_server_maintenance_heartbeat():這是進程管理實現(xiàn)的主要事件,master啟動了一個定時器,每隔1s觸發(fā)一次,主要用于dynamic、ondemand模式下的worker管理,master會定時檢查各worker pool的worker進程數(shù),通過此定時器實現(xiàn)worker數(shù)量的控制

3.fpm_pctl_heartbeat():這個事件是用于限制worker處理單個請求最大耗時的,php-fpm.conf中有一個request_terminate_timeout的配置項,如果worker處理一個請求的總時長超過了這個值那么master將會向此worker進程發(fā)送kill -TERM信號殺掉worker進程,此配置單位為秒,默認值為0表示關(guān)閉此機制

4.fpm_pctl_on_socket_accept():ondemand模式下master監(jiān)聽的新請求到達的事件,因為ondemand模式下fpm啟動時是不會預(yù)創(chuàng)建worker的,有請求時才會生成子進程,所以請求到達時需要通知master進程

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/39864.html

相關(guān)文章

  • (PHP7內(nèi)核剖析-1) CGIFastCGI

    摘要:是與之間數(shù)據(jù)交換的一種協(xié)議。當收到這個請求后,會啟動對應(yīng)的程序,這里就是的解析器。接下來解析器會解析文件,初始化執(zhí)行環(huán)境,然后處理請求,再以規(guī)定規(guī)定的格式返回處理后的結(jié)果,退出進程,再把結(jié)果返回給瀏覽器。 CGI:是 Web Server 與 Web Application 之間數(shù)據(jù)交換的一種協(xié)議。FastCGI:同 CGI,是一種通信協(xié)議,但比 CGI 在效率上做了一些優(yōu)化。PHP-...

    Salamander 評論0 收藏0
  • (PHP7內(nèi)核剖析-1) CGIFastCGI

    摘要:是與之間數(shù)據(jù)交換的一種協(xié)議。當收到這個請求后,會啟動對應(yīng)的程序,這里就是的解析器。接下來解析器會解析文件,初始化執(zhí)行環(huán)境,然后處理請求,再以規(guī)定規(guī)定的格式返回處理后的結(jié)果,退出進程,再把結(jié)果返回給瀏覽器。 CGI:是 Web Server 與 Web Application 之間數(shù)據(jù)交換的一種協(xié)議。FastCGI:同 CGI,是一種通信協(xié)議,但比 CGI 在效率上做了一些優(yōu)化。PHP-...

    abson 評論0 收藏0
  • 深入剖析 Web 服務(wù)器 PHP 應(yīng)用之間的通信機制 - 掌握 CGI 和 FastCGI 協(xié)議的

    摘要:深入?yún)f(xié)議從功能上來講,協(xié)議已經(jīng)完全能夠解決服務(wù)器與應(yīng)用之間的數(shù)據(jù)通信問題。消息頭信息主要的消息頭信息如下用于表示協(xié)議版本號。從服務(wù)器發(fā)送到應(yīng)用,表示中止一個處理中的請求。另外我們還需要明確一點就是服務(wù)器與進程間通信是無序的。 本文首發(fā)于 深入剖析 Web 服務(wù)器與 PHP 應(yīng)用之間的通信機制 - 掌握 CGI 和 FastCGI 協(xié)議的運行原理,轉(zhuǎn)載請注明出處! 身為一名使用 PHP ...

    mumumu 評論0 收藏0
  • (PHP7內(nèi)核剖析-10) 線程安全

    摘要:中專門為解決線程安全的問題抽象出了一個線程安全資源管理器,實現(xiàn)原理比較簡單既然共用資源這么困難那么就干脆不共用,各線程不再共享同一份全局變量,而是各復制一份,使用數(shù)據(jù)時各線程各取自己的副本,互不干擾。 1.線程安全資源管理器 PHP的SAPI多數(shù)是單線程環(huán)境,比如cli、fpm、cgi,每個進程只啟動一個主線程,這種模式下是不存在線程安全問題的,但是也有多線程的環(huán)境,比如Apache,...

    Achilles 評論0 收藏0
  • PHP7源碼學習】2019-04-10 FastCGI協(xié)議2

    摘要:全部視頻引入讀這篇文章之前請先閱讀源碼學習協(xié)議我們知道,客戶端之間通信的方式如下那么,我們今天詳細解釋一下圖中的協(xié)議的部分。協(xié)議就是為了解決協(xié)議的相關(guān)問題而出現(xiàn),是協(xié)議的升級版。在配置中指令中指定的值請求使用的協(xié)議,通常是或。 baiyan 全部視頻:https://segmentfault.com/a/11... 引入 讀這篇文章之前請先閱讀【PHP源碼學習】2019-04-09 ...

    Cympros 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<