HTTP的三種工作模型


Apache prefork模型:

  預派生模式,有一個主控制進程,然後生成多個子進程,使用select模型,最大併發1024,每個子進程有一個獨立的線程響應用戶請求,相對比較佔用內存,但是比較穩定,可以設置最大和最小進程數,是最古老的一種模式,也是最穩定的模式,適用於訪問量不是很大的場景。

  優點:穩定

  缺點:慢,佔用資源,1024個進程不適用於高併發場景

HTTP的三種工作模型

Apache woker模型:

  一種多進程和多線程混合的模型,有一個控制進程,啓動多個子進程,每個子進程裏面包含固定的線程,使用線程程來處理請求,當線程不夠使用的時候會再啓動一個新的子進程,然後在進程裏面再啓動線程處理請求,由於其使用了線程處理請求,因此可以承受更高的併發。

  優點:相比prefork 佔用的內存較少,可以同時處理更多的請求

  缺點:使用keepalive的長連接方式,某個線程會一直被佔據,即使沒有傳輸數據,也需要一直等待到超時纔會被釋放。如果過多的線程,被這樣佔據,也會導致在高併發場景下的無服務線程可用。(該問題在prefork模式下,同樣會發生)

HTTP的三種工作模型

Apache event模型:

  Apache中最新的模式,2012年發佈的apache 2.4.X系列正式支持event 模型,屬於事件驅動模型(epoll),每個進程響應多個請求,在現在版本里的已經是穩定可用的模式。它和worker模式很像,最大的區別在於,它解決了keepalive場景下,長期被佔用的線程的資源浪費問題(某些線程因爲被keepalive,空掛在哪裏等待,中間幾乎沒有請求過來,甚至等到超時)。event MPM中,會有一個專門的線程來管理這些keepalive類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執行完畢後,又允許它釋放。這樣增強了高併發場景下的請求處理能力。

  優點:單線程響應多請求,佔據更少的內存,高併發下表現更優秀,會有一個專門的線程來管理keep-alive類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執行完畢後,又允許它釋放

  缺點:沒有線程安全控制

HTTP的三種工作模型

httpd MPM(Multi-Processing Module,多進程處理模塊)模式總結

  1. prefork:進程模型,兩級結構,主進程master負責生成子進程,每個子進程負責響應一個請求
  2. worker:線程模型,三級結構,主進程master負責生成子進程,每個子進程負責生成多個線程,每個線程響應一個請求
  3. event:線程模型,三級結構,主進程master負責生成子進程,每個子進程生成多個線程,每個線程響應一個請求,但是增加了一個監聽線程,用於解決在設置了keep-alived場景下線程的空等待問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章