cgi、fastcgi、php-cgi、php-fpm的關係

1. CGI

CGI全稱是「公共網關接口」(Common Gateway Interface),HTTP服務器與你的或其它機器上的程序進行「交談」的一種工具,其程序須運行在網絡服務器上。php

CGI能夠用任何一種語言編寫,只要這種語言具備標準輸入、輸出和環境變量。如php,perl,tcl等。html

服務器接收到請求後,若是是index.html這樣的靜態文件,能夠直接去相應的目錄找到這個文件,而後返回給客戶端,可是當發送的請求是index.php這樣請求,顯然這個是須要解析的,此時就須要服務器將這個請求傳遞給cgi程序解析,解析完成後返回結果。可是要傳遞什麼內容呢,這個就是cgi來規定的。segmentfault

2. Fastcgi

Fastcgi是用來提升CGI程序性能的,是CGI的升級版,一種語言無關的協議服務器

服務器每次將請求傳遞給cig程序解析的時候都會解析配置文件,好比php.ini,想一想就知道這回影響性能,fastcgi會先啓動一個master解析配置文件,初始化環境,而後再啓動多個worker,當請求過來的時候master會傳遞給woker,而後當即去接受下一個請求。當worker不夠用的時候會增長,當空閒的worker多的時候會停掉一些,這樣的機制能夠提升性能,節省資源。網絡

3. php-cgi

  • PHP-CGI是php自帶的Fast-CGI管理器.
  • php.ini修改以後,必須kill掉php-cgi再啓動php.ini 才生效。不能夠平滑的重啓
  • 內存不能動態分配
  • 啓動php,指定啓動的worker ,長期駐留在內存裏 ,用戶訪問php文件, php-cgi 處理請求,返回結果

4. Php-fmp

  • 非官方fastCgi進程管理器,後來php5.4開始,被官方收錄了
  • 能夠平滑重啓php
  • 動態調度進程
  • 啓動php,動態指定啓動的worker ,長期駐留在內存裏 ,根據來訪壓力動態增減worker的進程數量,用戶訪問php文件, php-fpm 處理請求,返回結果

php-cgi和php-fpm的關係呢?php-fpm

php54是以前是一種關係,php54以後另外一種關係。php54以前,php-fpm(第三方編譯)是管理器,php-cgi是解釋器。php54以後,php-fpm(官方自帶),master 與 pool 模式。php-fpm 和 php-cgi 沒有關係了。php-fpm又是解釋器,又是管理器網上大部分說法:php-fpm 是管理php-cgi 的,是針對php54以前的工具

參考資料

https://www.awaimai.com/371.html性能

https://segmentfault.com/q/1010000000256516ui

http://cuishan.win/2017/02/05/cgi-fastcgi-php-cgi-php-fpm/htm

https://www.zhihu.com/question/55835080

相關文章
相關標籤/搜索