Apache 性能最優化分析(13)_Windows教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!
      附錄:預分支(Pre-Forking)模型

        Unix上的Apache是應用了預分支模型的服務器。父進程的責任僅在于繁衍子進程,它從不響應來自socket的任何請求。真正處理連接的是子進程,每個子進程在終止之前會(逐一地)為多個連接服務。父進程根據服務器負載的變化(通過監視記分板,記分板由子進程負責保持同步)生成新的或者殺掉舊的子進程。

        這種模型為服務器提供了其他模型所不具備的健壯。父進程的代碼非常簡單,它有足夠的信心保證在不出現錯誤的情況下持續運行。子進程就很復雜了,而且當您加入了第三方提供的模塊后,將冒segmentation fault和其他崩潰的危險。即便這樣的事情發生了,也只會影響到一個連接。父進程將繼續為請求服務,并迅速替換掉已經死亡的子進程。

        預分支在不同的Unix之間有良好的可移植性。Apache向來將它作為重要的目標之一,并且將保持下去。

        但預分支模型由于各種各樣的性能問題而飽受批判。主要的因素是分支進程帶來的負擔、上下文切換帶來的負擔和多個進程為內存帶來的負擔。另外它不能為請求提供有效的緩存機制(比如mmap文件池)。另有一些模型。JAWS project的論文對它們進行了詳細的分析。實際上,所有這些模型帶來的性能損失在不同操作系統上的差別迥異。

        Apache的內核代碼已經支持多線程。NT上的Apache 1.3就是多線程的。至少有另外兩種實驗性的多線程Apache:一個基于1.3內核并運行在DCE上;另一個基于1.0內核,它使用了一套自定義的用戶級線程庫。它們都不是對公眾發行的。有一個已經發行了的Apache實驗版本:運行于Netscape運行時可移植(Portable Run Time)平臺上的1.3版,可以在此下載(如果您準備使用它的話,歡迎您加入new-httpd郵件列表)。被重新設計的Apache2.0將包含抽象化的服務器模型,它使我們可以既支持預分支模型,又支持多種線程模型。

      來源:網絡搜集//所屬分類:Windows教程/更新時間:2013-04-16
      相關Windows教程