由异步servlet所想

转载 2012年03月29日 14:06:08
 
 
我们一直在用程序模拟现实世界的规则,但是有些很常见的规则,当我们引入到计算机中后,确并不一定适用。因为这个虚拟世界的构建规则跟现实世界是有差异的。特别是当我们还在跟硬件,性能做抗争的时候,现实世界的优秀法则往往并不能完全的映射到这个虚拟世界中。

一个简单的例子。当我们去面包店买面包的时候一般过程是这样的,
1.我对店员说:“你好,我要买面包。”
2.店员听到后说:“请稍等...”然后店员去厨房取面包,我在面包店等待...
3.店员拿出面包交给我,我付钱。买面包完成。

这里一共有三个步骤:1.我发出买面包请求。2.店员接受处理我的请求,我等待。3.店员完成请求,返回给我面包。
事情的处理过程很好,规则简单而适用。于是我们的计算机也模拟这个过程,实现了web的请求/应答模式:1.浏览器向web服务器请求资源。2.服务器响应请求,查找资源。3.服务器返回资源,请求完成。

但是仔细看看我们就能发现这个模式的问题:在步骤2店员拿面包的时候我什么都没做!我在等待!在店员拿面包够快的话这样也没什么大问题,我等半分钟,也没浪费多少时间。但是如果面包还在烤炉里,我等了十分钟店员才从厨房出来!那我可要发火了!同步servlet正是这样处理请求的。(注意这里要把servlet当买面包的人而不是把浏览器。)

于是我们开始找解决办法:
1.我等了5分钟,店员如果没出来,我就不买了。到计算机里,就是常见的请求超时处理了。浏览器在访问一个不存在的站点的时候,就会尝试连接一段时间,然后打开错误界面:Internet Explorer 无法显示该网页。
2.店员出来告诉我,面包还在烤,问我愿意等吗?这种处理过程计算机也有使用。3.我在步骤1的时候对店员说:“你好,我要买面包。麻烦面包好了打电话给我,我来取。”在计算机里这确是最棒的解决方案!也就是异步servlet的处理方式:

首先,Servlet接收到请求之后,将请求转交给一个异步线程来执行业务处理,Servlet线程本身返回至容器,异步线程处理完业务以后,可以直接生成响应数据,或者将请求继续转发给其它Servlet。如此一来,Servlet线程不再是一直处于阻塞状态以等待业务逻辑的处理,而是启动异步线程之后可以立即返回。

但是不要因此而以为异步servlet应该取代所有的同步servlet!

当我们把请求交给异步线程来执行业务处理,让Servlet线程本身返回至容器,其实是释放了一个线程,也创建了一个线程,结果是1+1-1=1,还是需要一个线程来为我们服务。资源一点也没节省,处理却更复杂了!那么异步servlet的用途究竟在哪呢?

目前我知道的适用异步servlet的一种情况,就是当我们想实现一种服务器主动与客户端(浏览器)通信的机制(comet)的时候,异步servlet能在这种机制中帮我们极大的节省线程资源。还有一种可能被应用的场景就是对数据库的访问时,但是要实现异步访问数据库,对整个应用的编程模式都会有很大影响!

虽然异步servlet没有那么高的期望值,但我觉得异步处理这种机制本身确是应该大放光彩的!适用场景也非常多:
Ajax,我们发送异步请求来防止程序阻塞。其实异步请求可以完全替代同步请求!
JMS,消息服务最诱人的地方就在与对异步的支持吧。
NIO,事件触发机制其实也有异步请求的影子。

我觉得任何的请求/应答模式都应该优先考虑异步请求的方式实现。异步请求是高效而灵活的。只是你可能需要点时间适应callBack的编程模式。

相关文章推荐

直击儒豹搜索:搜你想看 索你所想

Knowyou want to know                       近日,儒豹搜索手机版界面已经完成了其版本的更新。现时,你再点击儒豹搜索时,android手机版1.8.1将会...

关于自己在学习java路程上的所思所想(一)

1、发现如果设置主键,那么表的顺序不再是按插入顺序显而是以正序显示,主键的不光只代表非空+唯一的特性 2、使用类似内连接查询,最好用.标明数据属于哪张表的(employee.id),否则可以产生数据...

O2O还有很长的路要走——由一次上门洗车经历所想

简单来说,上门洗车的目的是让你足不出户就能把爱车进行清洗。与任何新生事出现都伴随着很多的波折一样,上门洗车也面临着很多的问题,包括运营方面、政策制度方面和法律法规方面。而且这些问题还存在着相互制约的关...

杂谈——科技园实习的所见所想

在意法半导体ST(意法半导体)实习快两周了,也在科技园呆了这么些日子,没觉得这个在别人眼中神秘的地方有什么特别的地方:工作一样的朝九晚五,伙食一样的快餐盒饭,很多人一样挤公交,挤地铁,一样感慨工作压力...

对即将过去的这一年的所思所想

还有不到三个小时,我们就即将迎来2015年了,回顾2014年这一整年,有悲也有喜,有苦也有乐,文笔不好,也不知道该怎么写,那就从年初开始总结一下这一年的点点滴滴吧。        2014年三月份至九...

关于自己在学习java路程上的所思所想(二)

1.发现绝对路径可以e:/a.txt,也可以e:\a.txt(作为字符串要双反斜杠e:\\a.txt)这样写。 2.批处理和事务的区别:     批处理可以提升运行     事务是逻辑上的最小操作 ...

录你所想随录语音模块NR010S

  • 2012年08月08日 11:35
  • 311KB
  • 下载

低级键盘钩子,勾你所想

  • 2008年09月20日 18:04
  • 182KB
  • 下载

关于《白鹿原》的所思所想

昨天把《白鹿原》读完了,今天也把电影看完了。当时读完感慨颇多,叹世事,叹人生,叹人性,叹无情的挫折,叹无尽的苦难,叹农民的哀叹…..      当然,小说的开头就是“这辈子令白嘉轩自豪的壮举是娶了七房...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:由异步servlet所想
举报原因:
原因补充:

(最多只允许输入30个字)