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

資訊專欄INFORMATION COLUMN

cgi fast-cgi php-fpm三者的理解

eternalshallow / 807人閱讀

摘要:當收到這個請求后,會啟動對應的程序,這里就是的解析器。接下來解析器會解析文件,初始化執行環境,然后處理請求,再以規定的規定的格式返回處理后的結果,退出進程。當請求過來時,會傳遞給一個,然后立即可以接受下一個請求。的管理對象是。

CGI

CGI, Common Gateway Interface, is a tool for HTTP server to contact with programs on other servers, which can be used into any languages with standard input, standard output and environmental variables, such as PHP, Perl, or Tcl.

FastCGI

FastCGI is a kind of CGI which is long-live, which will always be running. With FastCGI, it"ll take less time t fork(which is a problem of fork-and-execute mode in CGI). In additional, FastCGI also supports for distributed computing.
It is also not language related, which is an opened extension of CGI, which is used to keep CGI running in the memory. It"s well-known that loading of CGI has been the main reason of low performance.
the main process of running FastCGI:
Loading the Process Manager of FastCGI when a Web server has booted(IIS ISAPI or Apache Module)
The Process Manager of FastCGI will initiate itself to create several CGI processes, which are used to wait for connection of Web servers.
When requests from clients have reached the Web server, the Process Manager of FastCGI will select a CGI set up before to connect, whose environmental variables and standard input will be sent to the sub process php-cgi of FastCGI.
This sub process will return standard output and error info to the Web server with the same connection. Requests will be finished when it closes the connection.
Therefore, FastCGI only set once for parsing php.ini, loading extensions and initiating all the data structures.

shortcuts

Because of multi-processes, FastCGI will cost more memory than CGI, whose each process(PHP-CGI) will cost about 7Mb to 25Mb memory.
Data from the article: Nginx 0.8x + PHP 5.2.13(FastCGI) is 10 times better than Apache(Edition 6)
when 30k connection happens in parallel, 10 Nginx processes will only cost 150Mb Mem(15Mb 10), and 64 PHP-CGI will only cost about 1280Mb(20Mb 64).

PHP-CGI

PHP-CGI is one kind of the Process Manager of FastCGI, which is within php itself.
The command to boot is as follow:
php-cgi -b 127.0.0.1:9000
shortcuts

After changing php.ini, you should reboot PHP-CGI to make the new php.ini work.
When a PHP-CGI process is killed, all the PHP code will cannot run.(PHP-FPM and Spawn-FCGI do not have the same problem)

PHP-FPM

PHP-FPM is another kind of the Process Manager of FastCGI, which can be downloaded here.
It"s actually a patch for PHP, which is used to integrate the Process Manager of FastCGI into PHP, which should be make into PHP before version 5.3.2.
PHP-FPM can be used to control sub processes of PHP-CGI:
/usr/local/php/sbin/php-fpm [options]

# options --start: start a fastcgi process of php --stop: force to
kill a fastcgi process of php --quit: smooth to kill a fastcgi
process of php --restart: restart a fastcgi process of php --reload:
smooth to reload php.ini --logrotate: enable log files again

Spawn-FCGI Spawn-FCGI is a general kind of the Process Manager of
FastCGI, which is one part of lighttpd.

首先要明白CGI是干什么的?CGI是為了保證web server傳遞過來的數據是標準個數的,方便CGI程序的編寫者。

web server(比如說nginx)只是內容的分發者。比如,如果請求/index.html,那么web
server會去文件系統中找到這個文件,發送給瀏覽器,這里分發的是靜態數據。好了,如果現在的請求是index.php,根據配置文件,nginx知道這個不是靜態文件,需要去找php解析器來處理,那么他會把這個請求簡單處理后交給php解析器。nginx會傳哪些數據給php解析器呢?url要有吧,查詢字符串也得有吧,POST數據也需要有,HTTP
header不能少吧,好的,CGI就是規定要傳哪些數據,以什么樣的格式傳遞給后方處理這個請求的協議。仔細想想,你再PHP代碼中使用的用戶是從哪里來的。
當web server收到/index.php
這個請求后,會啟動對應的CGI程序,這里就是PHP的解析器。接下來PHP解析器會解析php.ini文件,初始化執行環境,然后處理請求,再以規定的CGI規定的格式返回處理后的結果,退出進程。web
server再把結果返回給瀏覽器。

明白了CGI是個協議,跟進程什么的沒有關系。那fastcgi又是什么呢?Fasecgi是用來提高CGI程序性能的。

提高性能,那么CGI程序的性能問題在哪呢?“PHP解析器會解析php.ini文件,初始化執行環境”,就是這里了。標準的CGI對每個請求文件都會執行這些步驟(不嫌累??!啟動進程很累的說?。?,所以處理每個請求的時間會比較長。這明顯不合理嘛!那么Fastcgi是怎么做的呢?首先,Fastcgi會先啟動一個master,解析配置環境,初始化執行環境,然后再啟動多個worker。當請求過來時,master會傳遞給一個worker,然后立即可以接受下一個請求。這樣就避免了重復的勞動,效率自然是高。而且當worker不夠用時,master可以根據配置預先啟動幾個worker等著;當然空閑worker太多時,也會停掉一些,這樣就提高了性能,也節約了資源,這就是fastcgi對進程的管理。

那PHP-FPM又是什么呢?是一個實現了Fastcgi的程序,被PHP官方收了。

大家都知道,PHP的解釋器是php-cgi。php-cgi只是個CGI程序,他自己本身只能解析請求,返回結果,不會進程管理(皇上,臣妾真的做不到?。。┧跃统霈F了一些能夠調度php-cgi進程的程序,比如說由lighthttpd分離出來的spawn-fcgi。好了PHP-FPM也是這么個東東,在長時間的發展后,逐漸得到了大家的認可(要知道,前幾年大家可是抱怨php-fpm穩定性太差的),也越來越流行。

好了,最后來回答你的問題。網上有的說,fastcgi是一個協議,php-fpm實現了這個協議。

有的說,php-fpm是fastcgi進程的管理器,用來管理fastcgi進程的

對。php-fpm的管理對象是php-cgi。但不能說php-fpm是fastcgi進程的管理器,因為前面說了fastcgi是個協議,似乎沒有這么個進程存在,就算存在php-fpm也管理不了他(至少目前是)。

有的說,php-fpm是php內核的一個補丁

以前是對的。因為最開始的時候php-fpm沒有包含在php內核里面,要使用這個功能,需要找到與源碼版本相同的php-fpm對內核打補丁,然后再編譯。后來php內核集成了php-fpm之后就方便多了,使用--enable-fpm這個編譯參數即可。

有的說,修改了php.ini配置文件后,沒辦法平滑重啟,所以就誕生了php-fpm

是的,修改php.ini之后,php-cgi進程的確沒辦法平滑重啟的。php-fpm對此的處理機制是新的worker用新的配置,已經存在的worker處理完手上的活就可以歇著了,通過這種機制來平滑過度。

還有的說php-cgi是php自帶的FastCGI管理器,那這樣的話干嗎又弄出個php-fpm出來
不對。php-cgi只是解釋php腳本的程序而已。

如何讓php更好的支持php-fpm

php-fpm提供了更好的php進程管理方式,可以有效的控制內存和進程,可以平滑重載php配置。在./configure的時候帶-enable-fpm參數即可開啟php-fpm。
修改nginx配置文件已支持php-fpm

nginx安裝完場以后,修改nginx配置文件為nginx.conf
其中server段增加如下配置,否則會出現No input file specified.錯誤 pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

啟動php-fpm和nginx

/usr/local/php/sbin/php-fpm

手動打補丁的啟動方式

/usr/local/php/sbin/php-fpm start

sudo /usr/local/nginx/nginx

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/35850.html

相關文章

  • cgi fast-cgi php-fpm三者理解

    摘要:當收到這個請求后,會啟動對應的程序,這里就是的解析器。接下來解析器會解析文件,初始化執行環境,然后處理請求,再以規定的規定的格式返回處理后的結果,退出進程。當請求過來時,會傳遞給一個,然后立即可以接受下一個請求。的管理對象是。 CGI CGI, Common Gateway Interface, is a tool for HTTP server to contact with pro...

    libin19890520 評論0 收藏0
  • cgi fast-cgi php-fpm三者理解

    摘要:當收到這個請求后,會啟動對應的程序,這里就是的解析器。接下來解析器會解析文件,初始化執行環境,然后處理請求,再以規定的規定的格式返回處理后的結果,退出進程。當請求過來時,會傳遞給一個,然后立即可以接受下一個請求。的管理對象是。 CGI CGI, Common Gateway Interface, is a tool for HTTP server to contact with pro...

    appetizerio 評論0 收藏0
  • cgi和fast-cgi以及php-fpm聯系和區別

    摘要:解析器會解析文件,初始化執行環境準的對每個請求都會執行這些步驟太累了對吧而且處理每個時間的時間會比較長首先,會先啟一個,解析配置文件,初始化執行環境,然后再啟動多個。當請求過來時,會傳遞給一個,然后立即可以接受下一個請求。 簡單粗暴版本: cgi(公共網關接口) || 根據nginx配置文件,知道不是靜態文件 需要去找PHP解析器來處理 || ...

    coolpail 評論0 收藏0

發表評論

0條評論

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