2010-01-23 45 views
0

「我寧願它用PHP或Java編寫(我知道PHP不能執行多個線程,但可以用多個進程完成)」。什麼是PHP中的「多進程」?

當聲明「多個進程」時,這個語句意味着什麼?那裏有沒有好的例子?

回答

0

多進程意味着幾個進程,可能並行執行。

而「進程」只是一個程序的執行。因此,多進程意味着程序的多次執行 - 並行地實現某種多線程結果:不是讓一個程序有多個線程,這在PHP中是不可能的,而是啓動相同的程序並行編程不止一次(並且,通常,程序的每個實例將與總數據的子集一起工作)

+1

繼續 - 扔他骨頭,提及http://www.php.net/manual /en/refs.fileprocess.process.php :-) – 2010-01-23 11:04:38

1

或多或少的程序啓動過程。例如,如果您啓動兩次Web服務器,您將有兩個進程,它們將能夠同時響應不同的請求。

線程或多或少是進程內的子進程。這樣Web服務器通常會有來自不同用戶的多個線程處理請求。這意味着只有一個進程可以同時處理多個請求。

0

「多進程」的最好例子是Apache httpd本身。啓動它會產生一個「父母」進程,然後啓動一個或多個處理請求的「子進程」:

# ps auxfww | grep '[h]ttpd' 
root  8632 0.0 0.2 247376 8380 ?  Ss 05:57 0:00 /usr/sbin/httpd 
apache 8635 0.0 0.1 247376 4716 ?  S 05:57 0:00 \_ /usr/sbin/httpd 
apache 8636 0.0 0.1 247376 4716 ?  S 05:57 0:00 \_ /usr/sbin/httpd 
apache 8637 0.0 0.1 247376 4716 ?  S 05:57 0:00 \_ /usr/sbin/httpd 
apache 8638 0.0 0.1 247376 4716 ?  S 05:57 0:00 \_ /usr/sbin/httpd 
apache 8639 0.0 0.1 247376 4716 ?  S 05:57 0:00 \_ /usr/sbin/httpd 
apache 8640 0.0 0.1 247376 4716 ?  S 05:57 0:00 \_ /usr/sbin/httpd 
apache 8641 0.0 0.1 247376 4716 ?  S 05:57 0:00 \_ /usr/sbin/httpd 
apache 8642 0.0 0.1 247376 4716 ?  S 05:57 0:00 \_ /usr/sbin/httpd