2012-01-30 60 views
2

當這個腳本已經被另一個連接執行時,Apache(現在最流行的版本,我猜)如何處理與腳本的連接?我的猜測一直是 - 一旦收到對腳本的請求,腳本的內容就被複制到內存/編譯/執行,並且在這個過程中還有另一個請求 - 同樣的事情發生了(假設Apache不會鎖定腳本文件,只是爲另一個編譯/內存存儲/執行提供另一份內存/ CPU)Apache:同時連接到單個腳本

或者是否存在排隊/等待機制?

假設這個額外的連接提供了足夠的內存cpu,並且不通過最大連接設置。

回答

2

快速(而且簡單)的答案是每個請求都是一個新進程的進程。 Apache在某個端口偵聽併爲每個請求創建一個處理該請求的新進程。這意味着沒有共享內存。

還可以看看使用「ps」命令的進程,您將看到每個請求的一個「http」進程。

看看這裏更復雜的工作:http://httpd.apache.org/docs/2.0/mod/worker.html 和谷歌看起來太:) http://docstore.mik.ua/orelly/weblinux2/apache/ch01_02.htm

+0

工人核心模塊的腸子是我一直在尋找,謝謝! (不要欣賞你試圖谷歌我雖然*瘋狂的臉在這裏*:D) – kyril 2012-01-30 21:54:26

+0

以PHP的情況下,子進程或者調用SO版本的PHP編譯器/ RTS如果啓用了mod_php5或一個PHP -cgi,例如,如果啓用了mod_suphp。在第一種情況下,您可能還有一個PHP操作碼緩存,例如緩存PHP模塊的編譯副本的APC緩存。正如Neil所說,他們都將以平行過程運行。如果您的腳本訪問共享資源(例如寫入應用程序數據文件),那麼您需要在腳本中處理這種可能性,但有一些標準模式。 – TerryE 2012-01-31 13:05:43