Apache默認的是線程安全的prefork,Prefork MPM 使用多個子進程,每個子進程有一個線程,每個進程每次只處理一個請求連接,一個請求出故障後不會影響其他請求,是線程安全的
worker使用的是多進程多線程,每個進程有多個線程,每個線程每次處理一個請求連接,擁有更高的性能,但是是非線程安全的。
PHP的官方推薦不適用線程的 mpm,即threaded MPM,因爲PHP作爲一種膠水語言,將幾十種第三方庫連接起來構建程序,如果其中有第三方庫不能正常工作了,PHP都需要對其進行診斷問題然後修復,當底層的環境不是每個獨立的進程和完全分離的內存分佈的時候,將會帶入很多不穩定因素進來。
如果需要處理大量請求的話,可以將Apache + mod_php換成nginx + php-fpm。
相對於apache的select的網絡i/o模型,nginx採用了性能更好的epoll模型,再加上fpm實現的fastcgi,可以常駐內存,只要初始化一次就可以,可以支持更高的併發。