开源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的相关资源
https://grizzly.dev.java.net/
[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