基于tomcat响应处理模型实现的高并发web服务器
来源:互联网 发布:有了域名能干什么 编辑:程序博客网 时间:2024/06/11 04:16
在上一篇博客中,一个简单的AIOweb处理例子,可以看到AIO异步处理,依赖操作系统完成IO操作的Proactor处理模型确实很强大,可以是实现高并发,高响应服务器的不错选择,但是在tomcat中的connector的处理模型还依旧是基于NIO的处理,当然,我认为这可能会在以后的版本进行改进,但另一方面,我更认为AIO的负载控制方面的处理可能是比较难的,因为AIO api并没有提供我们对分配线程组的处理,而只是提供一个线程组,交给操作系统去解决io处理上的问题,所以,这可能会给需要复杂处理的负载均衡带来一定的控制难度
对于tomcat的connector处理,我推荐看一下这篇博客,分析的比较到位http://liudeh-009.iteye.com/blog/1561638
tomcat的处理模型就是这样的,通过acceptor去accept过来的channel,再将channel注册到pollers中的selector,去select以及后面进行业务IO处理,接下来就是servlet引擎的工作 ,对channel的request进行响应。
好吧,接下来介绍一下我的实现吧,我的例子中是采用静态页面作为响应,如果有哪位朋友知道如果加入servlet,以及像tomcat一样servlet引擎的东西,请指教
类的结构图,这里就不贴代码了,有兴趣的朋友,可以到http://download.csdn.net/detail/chenxuegui123/7330269下载
我的处理模型还是差不多的,都是基于把acceptor和业务IO处理的worker分离开,从而实现更高的响应速度,而和tomcat实现上又有些区别,在acceptor线程组中的每个acceptor中我的实现并不是让非阻塞的ServerSocketChannel一直accept,再对SocketChannel进行处理,而是通过再acceptor中加入一个selector,有操作系统通知我们感兴趣的事件的发生。(以上不贴源码,有兴趣了解的朋友可以看一下上面的源码,还有我的源码下载),当然,这通过测试,在acceptor中加入selector的操作会使得并发更高
而在worker线程组中,我的每个worker都维护这一个阻塞队列,对需要处理的io进行缓存,而不是在加入selector,由操作系统通知我们感兴趣时间的发生,因为在本例中是基于静态页面的响应,所以都是对于每个请求就行响应,简单点,没有tomcat来的那么复杂
当然,经100000个并发响应测试,这个处理模型的并发速度还是不错的
- 基于tomcat响应处理模型实现的高并发web服务器
- 基于线程的高并发服务器
- 高并发服务器处理
- 支持高并发的IIS Web服务器常用设置--实现10万个并发请求
- java web处理高并发的方法
- Apache + Tomcat Web服务器的并发性能
- 几种并发服务器模型的实现
- 并发服务器模型实现的方法
- Web网站架构的高并发实现
- 高性能并发Web服务器实现核心内幕
- 从零实现高并发Web服务器-哈希表
- 基于 epoll 的网络高并发模型开发
- 使用Select I/O模型来实现一个并发处理多个客户端的TCP服务器
- Select I/O模型来实现一个并发处理多个客户端的TCP服务器
- java web 高并发处理
- java web 高并发处理
- tomcat高并发apr io模型
- web 的高并发
- CPU cache
- Android布局之FrameLayout设置控件居中显示
- XCL-Charts画面积图(AreaChart) 例1
- Linux-网桥原理分析(一)
- 覆盖、重载、基调与原型
- 基于tomcat响应处理模型实现的高并发web服务器
- 又一版 A+B 1877
- unidac连接FireBird数据库
- maven-thrift-plugin-0.2-HPS-1.jar包下载
- OOAD系统分析视频观看笔记
- background引发的问题
- source insight 中文乱码的解决方案
- 修改Tomcat的编码方式
- 关于multimap的练习和two sum