cgi与php的区别,fastcgi与cgi的区别
fastcgi與cgi有什么不同
前言
現在的CGI基本沒人使用,不安全以及性能極其低下,越來越多的使用web內置擴展、fastCGI。例如微軟iis的ISAPI,apache的php模塊,nginx的php-cgi。CGI、內置模塊、fastcgi這三種性能最好的要屬于fast_cgi速度最快,但是需要額外的進程。解析來看看CGI和FASTCGI有什么不同.
CGI方式介紹:
cgi在2000年或更早的時候用得比較多,以前web服務器一般只處理靜態的請求,如果碰到一個動態請求怎么辦呢?web服務器會根據這次請求的內容,然后會fork一個新進程來運行外部c程序(或perl腳本...), 這個進程會把處理完的數據返回給web服務器,最后web服務器把內容發送給用戶,剛才fork的進程也隨之退出。 如果下次用戶還請求改動態腳本,那么web服務器又再次fork一個新進程,周而復始的進行。
web內置模塊介紹:
后來出現了一種更高級的方式是, web服務器可以內置perl解釋器或php解釋器。 也就是說這些解釋器做成模塊的方式,web服務器會在啟動的時候就啟動這些解釋器。 當有新的動態請求進來時,web服務器就是自己解析這些perl或php腳本,省得重新fork一個進程,效率提高了。
fastcgi方式介紹:
fastcgi的方式是,web服務器收到一個請求時,他不會重新fork一個進程(因為這個進程在web服務器啟動時就開啟了,而且不會退出),web服務器直接把內容傳遞給這個進程(進程間通信,但fastcgi使用了別的方式,tcp方式通信),這個進程收到請求后進行處理,把結果返回給web服務器,最后自己接著等待下一個請求的到來,而不是退出.
fastcgi跟cgi的區別表格:
名稱
在web服務器方面
在對數據進行處理的進程方面
cgi
fork一個新的進程進行處理
讀取參數,處理數據,然后就結束生命期
fastcgi
用tcp方式跟遠程機子上的進程或本地進程建立連接
要開啟tcp端口,進入循環,等待數據的到來,處理數據
舉個例子: 服務端現在有個10萬個字單詞, 客戶每次會發來一個字符串,問以這個字符串為前綴的單詞有多少個。 那么可以寫一個程序,這個程序會建一棵trie樹,然后每次用戶請求過來時可以直接到這個trie去查找。 但是如果以cgi的方式的話,這次請求結束后這課trie也就沒了,等下次再啟動該進程時,又要新建一棵trie樹,這樣的效率就太低下了。?? 而用fastcgi的方式的話,這課trie樹在進程啟動時建立,以后就可以直接在trie樹上查詢指定的前綴了。
有網友對cgi,mod,fastcgi這三種方式的性能做了一次測試,他們的測試情況請看文章《》
總結
以上是生活随笔為你收集整理的cgi与php的区别,fastcgi与cgi的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云服务器centos怎么还原系统还原,云
- 下一篇: 天文学专业在什么时候学计算机,南京大学在