最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP7內(nèi)核CGI與FastCGI詳解

 更新時(shí)間:2019年04月14日 10:37:54   投稿:laozhang  
在本篇文章里小編給大家整理了關(guān)于PHP7內(nèi)核CGI與FastCGI的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。

CGI:是 Web Server 與 Web Application 之間數(shù)據(jù)交換的一種協(xié)議。
FastCGI:同 CGI,是一種通信協(xié)議,但比 CGI 在效率上做了一些優(yōu)化。

PHP-CGI:是 PHP (Web Application)對(duì) Web Server 提供的 CGI 協(xié)議的接口程序。

PHP-FPM:是 PHP(Web Application)對(duì) Web Server 提供的 FastCGI 協(xié)議的接口程序,額外還提供了相對(duì)智能一些任務(wù)管理

CGI工作流程

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

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

FastCGI工作流程

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

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

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

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

2.PHP-FPM的master進(jìn)程與worker進(jìn)程之間不會(huì)直接進(jìn)行通信,master通過共享內(nèi)存獲取worker進(jìn)程的信息,比如worker進(jìn)程當(dāng)前狀態(tài)、已處理請(qǐng)求數(shù)等,當(dāng)master進(jìn)程要?dú)⒌粢粋€(gè)worker進(jìn)程時(shí)則通過發(fā)送信號(hào)的方式通知worker進(jìn)程。

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

Worker工作流程

1.等待請(qǐng)求: worker進(jìn)程阻塞在fcgi_accept_request()等待請(qǐng)求;

2.解析請(qǐng)求: fastcgi請(qǐng)求到達(dá)后被worker接收,然后開始接收并解析請(qǐng)求數(shù)據(jù),直到request數(shù)據(jù)完全到達(dá);

3.請(qǐng)求初始化: 執(zhí)行php_request_startup(),此階段會(huì)調(diào)用每個(gè)擴(kuò)展的:PHP_RINIT_FUNCTION();

4.編譯、執(zhí)行: 由php_execute_script()完成PHP腳本的編譯、執(zhí)行;

5.關(guān)閉請(qǐng)求: 請(qǐng)求完成后執(zhí)行php_request_shutdown(),此階段會(huì)調(diào)用每個(gè)擴(kuò)展的:PHP_RSHUTDOWN_FUNCTION(),然后進(jìn)入步驟(1)等待下一個(gè)請(qǐng)求。

Master進(jìn)程管理

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

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

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

PHP-FPM事件管理器

1.sp[1]管道可讀事件:這個(gè)事件是master用于處理信號(hào)的

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

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

4.fpm_pctl_on_socket_accept():ondemand模式下master監(jiān)聽的新請(qǐng)求到達(dá)的事件,因?yàn)閛ndemand模式下fpm啟動(dòng)時(shí)是不會(huì)預(yù)創(chuàng)建worker的,有請(qǐng)求時(shí)才會(huì)生成子進(jìn)程,所以請(qǐng)求到達(dá)時(shí)需要通知master進(jìn)程

相關(guān)文章

  • 用PHP讀取和編寫XML DOM的實(shí)現(xiàn)代碼

    用PHP讀取和編寫XML DOM的實(shí)現(xiàn)代碼

    有許多技術(shù)可用于用 PHP 讀取和編寫 XML。本文提供了三種方法讀取 XML:使用 DOM 庫(kù)、使用 SAX 解析器和使用正則表達(dá)式。還介紹了使用 DOM 和 PHP 文本模板編寫 XML。
    2011-02-02
  • PHP基于curl模擬post提交json數(shù)據(jù)示例

    PHP基于curl模擬post提交json數(shù)據(jù)示例

    這篇文章主要介紹了PHP基于curl模擬post提交json數(shù)據(jù)操作,結(jié)合實(shí)例形式分析了php使用curl實(shí)現(xiàn)post方式提交json數(shù)據(jù)相關(guān)操作步驟與注意事項(xiàng),代碼簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2018-06-06
  • php實(shí)現(xiàn)的網(wǎng)絡(luò)相冊(cè)圖片防盜鏈完美破解方法

    php實(shí)現(xiàn)的網(wǎng)絡(luò)相冊(cè)圖片防盜鏈完美破解方法

    這篇文章主要介紹了php實(shí)現(xiàn)的網(wǎng)絡(luò)相冊(cè)圖片防盜鏈完美破解方法,可實(shí)現(xiàn)針對(duì)設(shè)置了防盜鏈網(wǎng)絡(luò)相冊(cè)圖片的抓取功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-07-07
  • PHP 開發(fā)環(huán)境配置(Zend Server安裝)

    PHP 開發(fā)環(huán)境配置(Zend Server安裝)

    運(yùn)行安裝文件(ZendServer-CE-php-5.3.2-5.0.1-Windows_x86.exe)開始安裝,選項(xiàng)請(qǐng)參照我的選擇。
    2010-04-04
  • php+xml編程之xpath的應(yīng)用實(shí)例

    php+xml編程之xpath的應(yīng)用實(shí)例

    這篇文章主要介紹了php+xml編程之xpath的應(yīng)用,實(shí)例分析了xpath的功能、定義及使用技巧,需要的朋友可以參考下
    2015-01-01
  • PHP7新增運(yùn)算符用法實(shí)例分析

    PHP7新增運(yùn)算符用法實(shí)例分析

    這篇文章主要介紹了PHP7新增運(yùn)算符用法,結(jié)合實(shí)例形式分析了合并運(yùn)算符、組合比較運(yùn)算符的功能與相關(guān)使用技巧,需要的朋友可以參考下
    2016-09-09
  • 基于php下載文件的詳解

    基于php下載文件的詳解

    本篇文章是對(duì)php下載文件進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP連續(xù)簽到功能實(shí)現(xiàn)方法詳解

    PHP連續(xù)簽到功能實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了PHP連續(xù)簽到功能實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了PHP結(jié)合mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)連續(xù)簽到功能相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • php中轉(zhuǎn)義mysql語句的實(shí)現(xiàn)代碼

    php中轉(zhuǎn)義mysql語句的實(shí)現(xiàn)代碼

    如果你需要向數(shù)據(jù)庫(kù),插入形如’你好’,這樣包含有單引號(hào)或者雙引號(hào)的字符串怎么辦,當(dāng)然可以使用反斜杠進(jìn)行轉(zhuǎn)義,但是如果內(nèi)容太多呢?
    2011-06-06
  • PHP開啟gzip頁(yè)面壓縮實(shí)例代碼

    PHP開啟gzip頁(yè)面壓縮實(shí)例代碼

    GZIP(GNU-ZIP)是一種壓縮技術(shù)。經(jīng)過GZIP壓縮后頁(yè)面大小可以變?yōu)樵瓉淼?0%甚至更小。這樣用戶瀏覽的時(shí)候就會(huì)感覺很爽很愉快!
    2010-03-03

最新評(píng)論

临泉县| 申扎县| 咸丰县| 华容县| 仪征市| 卢龙县| 湖南省| 都昌县| 合作市| 舒城县| 高淳县| 嵩明县| 昌乐县| 呼图壁县| 普宁市| 衡水市| 丹棱县| 北川| 灵宝市| 昭觉县| 额敏县| 香港| 大同市| 卢氏县| 石狮市| 聊城市| 新津县| 曲水县| 沙坪坝区| 班戈县| 乐陵市| 章丘市| 龙海市| 泾源县| 蒙自县| 青神县| 永嘉县| 五寨县| 延长县| 西贡区| 兴仁县|