Apache的三種工作模型

apache作爲web服務端:

Apache起初由美國的伊利諾伊大學香檳分校的國家超級計算機應用中心開發,目前經歷了兩大版本分別是1.X和 2.X,其可以通過編譯安裝實現特定的功能,官方網站

1.Apache prefork模型

預派生模式,有一個主控制進程,然後生成多個子進程,使用select模型,一個進程對應一個用戶的請求,它的最大併發數爲1024,這就導致沒有辦法適用於高併發的應用場景。每個子進程有一個獨立的線程響應用戶請求,相對比較佔用內存,但是比較穩定,可以設置最大和最小進程數,是最古老的一種模式,也是最穩定的模式,適合用於訪問量不是很大的場景。
優點:
相對穩定
缺點
佔用內存資源較大;
1024個進程不適合高併發場景
在這裏插入圖片描述

2.Apache woker模型

是一種多進程和多線程混合的模型,一個主進程來控制多個子進程,每個子進程裏面包含固定的線程,讓線程來處理用戶的請求,當線程不夠使用的時候再啓動另一個子進程,然後在進程裏面再啓動線程處理請求,由於其使用了線程處理i請求,因此可以承受更高的併發數。
優點
相對於prefork來說,佔用的內存較少;
可以同時處理更多的請求;
缺點
如果用戶使用keepalive的長連接方式,其中某個線程會一直被佔用,即使沒有數據傳輸也要一直等待,等待到超時時間後纔會被釋放。如果存在多個keepalive長鏈接的話,也會導致在高併發場景下的無服務線程可用。
在這裏插入圖片描述

3.Apache event模型

Apache中最新的模型,2012年發佈的apache2.4.x系列正式支持event模型,屬於事件驅動模型(epoll),每個進程響應多個請求,在現在版本里的已經是穩定可用的模式。他和worker模式很像,最大的區別在於他解決了keepalive場景下長期被佔用的線程資源浪費問題(某些線程因爲被keepalive,空掛在那裏等待,中間幾乎沒有請求數據,甚至等待超時。)event MPM中,會有一個專門的線程來管理這些keepalive類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執行完畢後,又允許它釋放。這樣增加了高併發場景下請求處理能力。
優點
單線程響應多請求,佔據更少的內存;
高併發下表現優秀,會有專門的監聽線程來管理keepalive類的請求,當有真實請求過來的時候,將請求傳遞給服務線程
缺點
沒有線程安全控制;
在這裏插入圖片描述

4.prefork、worker、event對比

prefork: 進程模型,兩級結構,主進程負責生成子進程,每個子進程負責響應一個請求
worker: 線程模型,三級結構,主進程負責生成子進程,每個子進程負責處理多個線程,每個線程響應一個請求
event: 線程模型,三級機構,主進程負責生成子進程,每個子進程生成多個線程,每個線程響應一個請求,但是增加了監聽線程,用於解決在設置keep-alived場景下線程的空等待問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章