開源 HTTP 引擎 Grizzly 中的 線程池 實現技術細節
[ 什么是 Grizzly]
Grizzly
簡
介
Grizzly
是一
種應
用程序框架,
專門
解決
編
寫成千上萬
用
戶
訪問
服
務
器
時
候
產
生的各
種問題
。使用
JAVA NIO
作
為
基
礎
,并
隱
藏其
編
程的
復雜
性。容易使用的高性能的
API
。
帶
來非阻塞
socketd
到
協議處
理
層
。利用高性能的
緩
沖和
緩
沖管理使用高性能的
線
程池。
Grizzly
的
歷
史
在
GlassFish
項
目中于
2004
年
誕
生。后來
為
Grizzly 1.0
。
Grizzly1.0
跟
Sun Java System Application Server8.1
,
8.2
和所有的
GlassFish
版本。用來代替本地的
Sun WebServer
運行
時
。
開
始目的是建構一個
HTTP Web
服
務
器,用來代替
Tomcat
的
Coyote
連
接器和
Sun WebServ er6.1
。
Grizzly1.0
在
2006
年的
時
候
變
得相當流行。多數
協議實現
都基于它。但是
Grizzly1.0
有
HTTP
協議
的特定
實現邏輯
包含在
傳
送
層
中,主 要
類
SelectorThread
包含若干的
HTTP
的
處
理,如文件
cache
,
請
求
監
控等。
為
了使用框架,需要
擴
展
SelectorThread
,例如
JettySelectorThread
,
SSLSelectorThread
。
Grizzly1.0
混合了
擴
展和
實現
。
雖
然如此,但
Grizzly1.0
仍然是很好的
實現
,有下面幾個
協議
利用了
Grizzly1.0
:
JRuby On Grizzly
Alaska
的
HTTP BC
組
件
GlassFishV3
的微內核
Phobos GlassFish
的
SOAP
Comet
、
Cometd
AsyncWeb
GlassFishV2
Sun Web2.0 Developer pack(REST Http Server)
Grizzly
的
相關資源
[ Grizzly 的運行機制 ]
以上圖片的簡要說明
① Pipeline相關
「 com.sun.enterprise.web.connector.grizzly 」 里面 、 有 大量「 Pipeline 」 之類的 class 、 例如 、「 Pipeline 、 KeepAlivePipeline 、 ThreadPoolExecutorPipeline 、 LinkedListPipeline 」 之類 。
「 Pipeline 」 的含義是 「 ThreadPoolWrapper 」、 也就是說 ThreadPool 中配置和指示的控制類 。
「 Pipeline 」 里面 、 有著預先被分配好的 thread pool 和 task list 。
Web 上過來的 request 請求到達服務器的時候, 特定 的 「 Pipeline 」 上預先分配好的 thread pool 中提取 thread 、 以供使用 。
※ thread pool 中提供 thread 的算法,下次描述
② SelectorThread 相關
「 com.sun.enterprise.web.connector.grizzly 」 里面 、 有個 「 SelectorThread 」 的類 。
這個類是 Grizzly 的 入口 類 。 所有的 HTTP 申請都會被發送到這個類里面 。
③ Task 相關
「 AcceptTask 」、「 ProcessTask 」、「 ReadTask 」 之類的類型是與此相關的 。
主要的功能是從 Requset 中分析得到有用的數據 。
主要的算法如下 :
◎ ContentLengthAlgorithm
◎ SeekHeaderAlgorithm
◎ StateMachineAlgorithm
◎ NoParsingAlgorithm
[ 那么 、 讓我們一起來研究研究 Thread Pool 的實現細節吧 ]
①
當 GlassFish 啟動的時候 、 Grizzly 的 SelectorThread は 同時被啟動 、 開始接受 Request
②
Class 名: SelectorThread
函數名: initEndpoint
説明: SelectorThread 啟動函數
③
Class 名: SelectorThread
函數名: initPipeline
説明: 初期化 Pipeline
※ 因為不能填圖 所以就不發代碼了 ~~~~
※ 現在的 Grizzly 版本里面、 Thread Pool 的算法只有 LinkedListPipeline 和 ThreadPoolExecutorPipeline
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
