JAVA的卡夫卡

          讓我們共同進步,分享成功

          常用鏈接

          統計

          最新評論

          • 1.?re: 去還是留?
          • 看來都不容易啊 做it就是這樣 看著那些做客戶的同事工資飛漲 哎 還是自己看看技術的書籍吧 呵呵
          • --kirari_wxy

          Tomcat對Apache MPM模型的實現

          Tomcat Apache MPM 的簡介

          Tomcat 簡介

          Tomcat 是一個免費的開源 Servlet 容器,它是 Apache 基金會的 Jakarta 項目中的核心項目,最近 Sun 也參與到其的開發中,并將它集成到 NetBeans 中。由于有了 Sun 的支持,最新的 Servlet Jsp 規范在 Tomcat 中得到體現。

          目前 Tomcat 最新版本是 5.5.17 ,完整的實現了 Sevlet2.4 JavaServer Pages 2.0 規范 (Java Community Process) 。與之前的版本相比, 5.5.17 兼容了以前版本的一些特性,也相應的加入了一些新的特性。

          1.???????? 支持 web 應用程序的靜態配置和動態配置。

          2.???????? 內置一個管理 Tomcat web 應用程序。方便對 Tomcat 的日常管理。

          3.???????? 提供 Realm 支持, Realm 是一些帶角色的用戶信息。 Tomcat 通過驗證這些信息來限制用戶對一些 web 應用程序的訪問。 Realm 類似于 unix 中組的概念。 Tomcat 主要支持 JDBCRealm , DataSourceRealm, JNDIRealm, MemoryRealm, JAASRealm 。這幾種 Realm

          4.???????? 提供 JNDI 支持。

          5.???????? 通過 DBCP 或第三方庫提供 JDBC 數據源。

          6.???????? 實現獨立類加載體系,以防 web 應用程序的類庫與 Tomcat 自身類庫沖突。

          7.???????? 集成 SSL ,實現安全傳輸。

          8.???????? 使用 JMX MBeans 進行組件的管理。

          9.???????? 支持集群。實現負載均衡。

          10.???? 多種日志支持。

          ???

          Apache MPM 簡介

          MPM( Multi-Processing Modules ) 多道處理模塊 , 在支持 POSIX 線程的 Unix 系統上, Apache 可以通過不同的 MPM 運行在一種多進程與多線程相混合的模式下來處理 Http 請求, MPM 模塊是 Apache2.0 的核心模塊。

          如果不用 “--with-mpm” 顯式指定某種 MPM prefork 就是 Unix 平臺上缺省的 MPM 。它所采用的預派生子進程方式也是 Apache 1.3 中采用的模式。 prefork 本身并沒有使用到線程, 2.0 版使用它是為了與 1.3 版保持兼容性;另一方面, prefork 用單獨的子進程來處理不同的請求,進程之間是彼此獨立的,這也使其成為最穩定的 MPM 之一。

          相對于 prefork worker 2.0 版中全新的支持多線程和多進程混合模型的 MPM 。由于使用線程來處理,所以可以處理相對海量的請求,而系統資源的開銷要小于基于進程的服務器。但是, worker 也使用了多進程,每個進程又生成多個線程,以獲得基于進程服務器的穩定性。這種 MPM 的工作方式將是 Apache 2.0 的發展趨勢。

          Tomcat MPM 的實現架構

          o_mpmframework.bmp

          o_mpmframework2.bmp

          Tomcat MPM 的實現源碼分析

          1.???????? 首先 PoolTcpEndpoint 調用 startEndpoint() 方法開始執行 MPM 的核心代碼

          代碼 :
          o_startEndpoint().bmp

          2.???????? 調用 PoolTcpEndpoint initEndpoint() 方法完成 PoolTcpEndpoint 的初始化 .
          o_initEndpoint().bmp

          3.???????? PoolTcpEndpoint 調用 ThreadPool start() 方法,完成 ThreadPool 的初始化

          代碼 :
          o_ThreadPool.start().bmp

          4.???????? 調用 ThreadPool runIt() 方法,開始監聽線程
          o_ThreadPool.runIt().bmp

          5.???????? 監聽線程調用 LeaderFollowerWorkerThread runIt() 方法監聽鏈接,在得到一個鏈接后該監聽線程處理該鏈接,并從 ThreadPool 里取一個新的線程運行監聽程序,監聽新的鏈接。

          ??? o_LeaderFollowerWork.runIt()1.bmp

          總結

          MPM 是一個成熟的多道任務處理模型, Tomcat 很好的實現了這個模型,提高了 Tomcat 的性能。希望這篇文檔對研究 MPM 的兄弟有所幫助。

          posted on 2006-08-08 16:13 JAVA的卡夫卡 閱讀(503) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 巴林左旗| 板桥市| 临漳县| 清丰县| 新郑市| 宝丰县| 格尔木市| 罗山县| 班玛县| 佛坪县| 丰城市| 武宣县| 曲水县| 张掖市| 新营市| 任丘市| 巴马| 景谷| 昌平区| 历史| 旬邑县| 宜君县| 鄂托克前旗| 宜春市| 汕头市| 东明县| 抚顺县| 吴堡县| 平湖市| 嘉黎县| 锡林郭勒盟| 蓬溪县| 霞浦县| 宝鸡市| 大石桥市| 阜宁县| 西宁市| 繁峙县| 齐河县| 宽甸| 阿拉善右旗|