web服务的并发技术以及解决方案
2014-09-04 11:10
239 查看
一个百万级用户的系统的web服务必须通过特殊的技术处理才能满足需求。
一个关键的词汇叫做“并发”,这样可以非阻塞的同时处理多个用户请求。对于初级处理这种多用户请求的程序员最先用到的方法就是来一个请求,开一个线程,处理完之后销毁现成。的确这种做法可以处理类似与同时为多用户提供服务的需求,但是这种做法的效率太低了。原因是新开一个线程需要去请求系统资源,处理完业务之后释放线程又需要很多时间,这样一来很可能时间大部分浪费到了非业务处理的部分。在这种情况下,出现了“池”的概念。可以预先开一些数量的线程放到池里,用的时候直接去池里取就可以了,用完了 也不用释放放回池里供其他请求继续使用。这种方式解决了上一做法的效率问题。那么,应该开多少线程放进去呢?简单来说,根据需求动态调整池中的线程数量是最合理的。具体策略就不再赘述。
“线程池”解决了多用户处理的问题,然而对于web请求来说,效率的瓶颈不在于cpu的处理速度。相信学过《计算机组成原理》的同学,对于以下的倒三角形一定有印象。
![](http://img.blog.csdn.net/20140904110508281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenp1cmllbWFubg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
cpu的梳理速度是一级缓存的数倍,二级缓存的数十倍,内存的数百倍,硬盘的数千万倍,网络IO的数亿。
于是就产生一个问题叫做NIO问题,而处理这个问题有效的方法也就是非阻塞是IO。下面介绍一些此方面的技术。
一个关键的词汇叫做“并发”,这样可以非阻塞的同时处理多个用户请求。对于初级处理这种多用户请求的程序员最先用到的方法就是来一个请求,开一个线程,处理完之后销毁现成。的确这种做法可以处理类似与同时为多用户提供服务的需求,但是这种做法的效率太低了。原因是新开一个线程需要去请求系统资源,处理完业务之后释放线程又需要很多时间,这样一来很可能时间大部分浪费到了非业务处理的部分。在这种情况下,出现了“池”的概念。可以预先开一些数量的线程放到池里,用的时候直接去池里取就可以了,用完了 也不用释放放回池里供其他请求继续使用。这种方式解决了上一做法的效率问题。那么,应该开多少线程放进去呢?简单来说,根据需求动态调整池中的线程数量是最合理的。具体策略就不再赘述。
“线程池”解决了多用户处理的问题,然而对于web请求来说,效率的瓶颈不在于cpu的处理速度。相信学过《计算机组成原理》的同学,对于以下的倒三角形一定有印象。
cpu的梳理速度是一级缓存的数倍,二级缓存的数十倍,内存的数百倍,硬盘的数千万倍,网络IO的数亿。
于是就产生一个问题叫做NIO问题,而处理这个问题有效的方法也就是非阻塞是IO。下面介绍一些此方面的技术。
相关文章推荐
- 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能
- (转)基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案
- 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能
- 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能
- 基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案
- 关于Web开发里并发、同步、异步以及事件驱动编程的相关技术
- 基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案
- 关于Web开发里并发、同步、异步以及事件驱动编程的相关技术
- 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能
- 基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案
- 下一代Web服务的基础框架——SOA技术论坛报道
- 用SVG技术实现动态图形输出的嵌入式Web服务
- "开源"与"Web服务"领跑07上半年软件技术发展
- Web服务涉及的主要技术
- 华为内部的技术资料:BT协议简介以及BT流量限制解决方案
- Web服务搜索与执行引擎(二)——相关技术的介绍
- "开源"与"Web服务"领跑07上半年软件技术发展
- Web服务搜索与执行引擎(二)——相关技术的介绍
- WEB服务动态解析及调用技术的实现(基于WSDL4J及SAAJ)
- 如何更新服务其证书-试用于web ssl证书过期以及其他形式应用的证书过期