1.Apache prefork模型:
apache的默認的模型預派 生模式,有 一個主控制進程,然后 生成多個 子進程,使 用select模型,最 大并發1024,每個 子進程有 一個獨 立的線程響應 用戶請求,相對 比較占 用內存,但是 比較穩定,可以設置最 大和最 小進程數,是最古 老 的 一種模式,也是最穩定的模式,適 用于訪問量 不 是很 大的場景。優點:穩定缺點: 大量 用戶訪問慢,占 用資源,1024個進程不 適 用于 高并發場景
2.Apache woker模型:
一種多進程和多線程混合的模型,有 一個控制進程,啟動多個 子進程,每個 子進程 里 面包含固定的線程,使 用線程程來處理 請求,當線程不 夠使 用的時候會再啟動 一個新的 子進程,然后在進程 里 面再啟動線程處理 請求,由于其使 用了 線程處理 請求,因此可以承受更 高的并發。優點:相 比prefork 占 用的內存較少,可以同時處理 更多的請求缺點:使用keepalive的長連接方式(會話保持狀態),某個線程會 一直被占據,即使沒有傳輸數據,也需要 一直等待到超時才會被釋放。如果過多的線程,被這樣占據,也會導致在 高并發場景下的 無服務線程可 用。(該問題在prefork模式下,同樣會發 生)
3. Apache event模型:
比worker多了一個監聽進程Apache中最新的模式,2012年 發布的apache 2.4.X系列 正式 支持event 模型,屬于事件驅動模型(epoll),每個進程響應多個請求,在現在版本 里 的已經是穩定可 用的模式。它和worker模式很像,最 大的區別在于,它解決了 keepalive場景下, 長期被占 用的線程的資源浪費問題(某些線程因為被keepalive,空掛在哪 里 等待,中間 幾乎沒有請求過來,甚 至等到超時)。event MPM中,會有 一個專 門的線程來管理 這些keepalive類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執 行 完畢后, 又允許它釋放。這樣增強了 高并發場景下的請求處理 能 力 。優點:單線程響應多請求,占據更 少的內存, 高并發下表現更 優秀,會有 一個專 門的線程來管理 keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執 行 完畢后, 又允許它釋放缺點:沒有線程安全控制