apache功能強大,應用十分普遍。linux
爲了使不一樣平臺的apache都能獲得優化,apache支持MPM模塊。web
linux/unix下的好的2個模塊分別爲prefork和worker。apache
最初設計unix的時候,並無線程這個概念,因此不管系統內核仍是應用軟件,都不支持線程的應用。最小的做業單位是進程。windows
windows是一個徹底支持線程的操做系統。線程比進程更小,能提升系統效率,減小系統開支。服務器
如今不管是linux仍是freebsd,都在積極改進,在內核中加入線程的支持。優化
apache自己即支持線程也支持進程。它怎麼實現的呢?就是用MPM。操作系統
prefork模塊:基於進程的web服務器.net
默認配置段以下:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
線程
prefork的工做原理是,由主控制進程生成「StartServers」個子進程,當空閒進程小於MinSpareServers時,系統生成一個又一個進程,直到進程數達到MaxSpareThreads;而MaxClients設置容許的最大客戶鏈接數。每一個子進程處理服務請求次數由MaxRequestPerChild定義。 缺省的設置值爲0,即響應無限此請求。
設計
worker模塊:基於線程程的web服務器
默認配置以下:
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
worker的工做原理是,由主控制進程生成「StartServers」個子進程,每一個子進程中包含固定的ThreadsPerChild線程數,各個線程獨立地處理請求。一樣,爲了避免在請求到來時再生成線程,MinSpareThreads和MaxSpareThreads設置了最少和最多的空閒線程數;而MaxClients設置容許的最大線程總數。若是現有子進程中的線程總數不能知足負載,控制進程將派生新的子進程。每一個子線程處理服務請求次數由MaxRequestPerChild定義。 缺省的設置值爲0,即響應無限此請求。