2010-10-01 59 views
1

我今天和我的一位老師有一個爭論,他說CGI是總是比Servlet慢。我告訴他,性能是主觀的,在某些情況下,CGI可能比Servlet表現更好。他堅持要得到CGI何時比Servlet更快的例子。我只想知道什麼是我能想到的最堅實的東西來對付「Servlet是總是快於CGI」。在什麼情況下CGI比Servlet更快?

+0

你真的很喜歡辯論。你的老師可能是正確的。儘管如此,我應該因爲對「永遠」這個詞保持謹慎而給你信心。 – gawi 2010-10-01 18:21:21

+0

如果您將「CGI」表示爲「運行[Perl | Python | whatever]腳本」,那麼他是正確的:servlet通常會在解釋器啓動之前完成。如果你認爲它的意思是「運行一個二進制文件」,那麼你肯定會發現像下面的Charlie Martin這樣的例子,預編譯的一段C將會很快加載和運行,這可能比servlet快得多。但是,你正在分裂頭髮。儘管如此,你的老師應該比使用「永遠」這個詞更好;) – 2010-10-01 20:23:07

+0

這個主題可能有助於更好地理解CGI:[我從來沒有真正理解:什麼是CGI?](http://stackoverflow.com/questions/2089271/i-never-really-understand-what-is-cgi) – BalusC 2010-10-02 03:38:09

回答

0

表現不是主觀的。去查找這個詞。

現在,爲了回答你的問題,當執行Servlet的Java代碼所需的時間足夠長以至於加載和執行CGI程序的時間由Java的時間所支配時,CGI將比Servlet快程序運行。因此,舉例來說,如果你有一個在C CGI程序,有

main(){ return; } 

和你相比,與一個servlet,它很可能會更快。

你想要做的是建立一個servlet容器和一個CGI目錄,並實際監控和衡量一些比較性能。

+0

我懷疑即使這樣會更快。你需要fork()和exec()。將其與在最可能已經產生的線程上處理請求進行比較。也許FastCGI可以在某些情況下獲勝,但不是普通的CGI。 – gawi 2010-10-01 18:23:42

+0

這真的取決於設置。正如你所說,fork/exec可能會有所作爲,但是你也可能正在運行fastCGI,所以fork./exec時間被消除了。換個角度來說,如果JVM必須交換任何重要的東西來處理請求,那可能比fork/exec要多得多。重點是**表現不是主觀**。如果你想知道哪個更快,* measure *。 – 2010-10-04 16:05:12

2

6年後....也許你可以通過電子郵件發送你的老師這樣的:

「平均來說,PHP版本比ASP版快,而CGI(C++)的版本快10倍以上比PHP和ASP都好。「 (http://www.wrensoft.com/zoom/benchmarks.html

基本上,CGI的性能會根據您實現的語言而有所不同,我懷疑一個servlet運行速度會比C++ CGI做同樣的事情還要快。資源消耗在發揮重要作用時,更會受到壓力。

問你的老師爲什麼Facebook將PHP編譯成C++版本,或者谷歌和亞馬遜爲什麼在他們的實現中使用C++。人們談論fork()exec()開銷,但不承認JVM在內部執行相同的操作。順便說一句,JVM是用C/C++編寫的。

相關問題