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)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 莒南县| 思茅市| 体育| 永平县| 昆明市| 临颍县| 襄汾县| 盐城市| 新兴县| 朝阳区| 兴国县| 泌阳县| 湖北省| 北流市| 平塘县| 清新县| 什邡市| 重庆市| 叙永县| 遂川县| 博野县| 伽师县| 南雄市| 五河县| 香港 | 上林县| 株洲市| 长泰县| 房山区| 邵阳市| 延庆县| 天门市| 佛教| 苍南县| 铜梁县| 永昌县| 四子王旗| 江西省| 临颍县| 洛川县| 深水埗区|