prefork模式 每個進程產生子進程處理請求
worker模式 每個進程產生多個子進程,再有每個子進程產生線程處理請求
prefork工作原理:控制進程在最初建立”StartServers”子進程數後,為滿足MinSpareServers設置的需要創建一個進程,等待一秒鐘創建兩個,在等待一秒鐘創建四個….最多達到每秒32個,直到滿足MaxSpareServers設置的值為止,這就是預派生(prefork)的由來,可以不必再請求到來時在產生新的進程,從而減少了系統的開銷
MaxSpareServers:設置了最大的空閒進程數,如果空閒進程數大於這個值,apache會自動kill掉多余的進程,這個值不要設置過大,如果設置的值比MinSpareServers的值要小,apache會自動調整為MinSpareServers+1
MaxRequestsPerChild:設置每個子進程可處理的請求數,0表示無限
worker工作原理:啟動時建立“StartServers“子進程數,每個子進程數種包含“ThreadsPerChild“線程數,然後父進程檢測所有子進程中空閒線程的總數,並建立或結束子進程使空閒線程的總是維持在” MinSpareThreads”和” MaxSpareThreads”之間的范圍,這個過程是自動調整的,一般沒有必要修改這些指令的缺省值
官方介紹prefork和worker工作模式
Apache MPM prefork 進程模式
使用多個子進程,每個子進程只有一個線程,每個進程在同一時間維持一次連接,將每個請求互相獨立,不影響其他請求,以進程來提供服務,非線程
這個多路處理模塊(MPM)實現了一個非線程型的、預派生的web服務器,它的工作方式類似於Apache 1.3。它適合於沒有線程安全庫,需要避免線程兼容性問題的系統。它是要求將每個請求相互獨立的情況下最好的MPM,這樣若一個請求出現問題就不會影響到其他請求,一個單獨的控制進程(父進程)負責產生子進程,這些子進程用於監聽請求並作出應答
Apache MPM worker 多線程多進程的多路處理模式
使用多個子進程,每個子進程有多個線程,每個線程在同一時間維持一個連接,使用線程來處理請求,可以處理海量請求,所以可以處理更多的並發請求(httpd在啟動的時候,會有root進程派生出幾個子進程,每個子進程中會有固定數量的線程,到時候提供服務的就是這些線程,也就是說一個線程能夠同時提供多次服務)
此多路處理模塊(MPM)使網絡服務器支持混合的多線程多進程。由於使用線程來處理請求,所以可以處理海量請求,而系統資源的開銷小於基於進程的MPM。但是,它也使用了多進程,每個進程又有多個線程,以獲得基於進程的MPM的穩定性