开源 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