中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是phpfpm的工作原理?

發布時間:2020-07-13 15:12:53 來源:億速云 閱讀:758 作者:Leah 欄目:編程語言

什么是phpfpm的工作原理?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

  php-fpm是一種master(主)/worker(子)多進程架構,與nginx設計風格有點類似。master進程主要負責CGI及PHP環境初始化、事件監聽、子進程狀態等等,worker進程負責處理php請求。

運行原理

php-fpm采用master/worker架構設計,前面簡單地描述master和worker進程模塊的功能。下面將詳細講解這兩個模塊的運行原理。

master進程

master進程工作流程分為4個階段,如下圖:

什么是phpfpm的工作原理?

1、cgi初始化階段:分別調用fcgi_init()和 sapi_startup()函數,注冊進程信號以及初始化sapi_globals全局變量。

2、 php環境初始化階段:由cgi_sapi_module.startup 觸發。實際調用php_cgi_startup函數,而php_cgi_startup內部又調用php_module_startup執行。

php_module_startup主要功能:

a)、加載和解析php配置;

b)、加載php模塊并記入函數符號表(function_table);

c)、加載zend擴展 ;

d)、設置禁用函數和類庫配置;

e)、注冊回收內存方法;

3、php-fpm初始化階段:執行fpm_init()函數。負責解析php-fpm.conf文件配置,獲取進程相關參數(允許進程打開的最大文件數等),初始化進程池及事件模型等操作。

4、php-fpm運行階段:執行fpm_run() 函數,運行后主進程發生阻塞。該階段分為兩部分:fork子進程和循環事件。

fork子進程部分交由fpm_children_create_initial函數處理( 注:ondemand模式在fpm_pctl_on_socket_accept函數創建)。

循環事件部分通過fpm_event_loop函數處理,其內部是一個死循環,負責事件的收集工作。

worker進程

worker進程分為 接收客戶端請求、處理請求、請求結束三個階段。

什么是phpfpm的工作原理?

1、接收客戶端請求:執行fcgi_accept_request函數,其內部通過調用accept函數獲取客戶端請求。

//請求鎖
FCGI_LOCK(req->listen_socket);
req->fd = accept(listen_socket, (struct sockaddr *)&sa, &len);
//釋放鎖
FCGI_UNLOCK(req->listen_socket);

從上面的代碼,可以注意到accept之前有一個請求鎖的操作,這么設計是為了避免請求出現“驚群”的現象。當然,這是一個可選的選項,可以取消該功能。

2、處理請求階段:首先,分別調用fpm_request_info、php_request_startup獲取請求內容及注冊全局變量($_GET、$_POST、$_SERVER、$_ENV、$_FILES);然后根據請求信息調用php_fopen_primary_script訪問腳本文件;最后交給php_execute_script執行。php_execute_script內部調用zend_execute_scripts方法將腳本交給zend引擎處理。

3、請求結束階段:執行php_request_shutdown函數。此時 回調register_shutdown_function注冊的函數及__destruct()方法,發送響應內容、釋放內存等操作。

總結

php-fpm采用master/worker架構設計, master進程負責CGI、PHP公共環境的初始化及事件監聽操作。worker進程負責請求的處理功能。在worker進程處理請求時,無需再次初始化PHP運行環境,這也是php-fpm性能優異的原因之一。

關于什么是phpfpm的工作原理?問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

偏关县| 巨野县| 屏南县| 长葛市| 麻城市| 南靖县| 育儿| 桂阳县| 华容县| 清新县| 西乌珠穆沁旗| 沂水县| 彰化县| 专栏| 宁强县| 肥城市| 盈江县| 陕西省| 永定县| 陆川县| 永州市| 永修县| 温州市| 栖霞市| 株洲市| 新郑市| 龙岩市| 康乐县| 竹山县| 满洲里市| 昌黎县| 读书| 奎屯市| 汝州市| 大宁县| 恭城| 克什克腾旗| 东乡族自治县| 南投县| 清水河县| 奉节县|