Java EE:迎合Web 2.0 - 编程入门网
限(以抽象单位表示持续时间)
图 1 展示了执行期间业务逻辑、数据库和 Web 服务之间的时间分布: 图 1. 执行步骤的时间分布 Java EE:迎合Web 2.0(5)时间:2011-01-26 IBM Constantine Plotniko这些选择的时限提供了一个可读的图表。在实际中,大多数 Web 服务进行处理使用的时间远远超过图表显示的时间。可以这样讲,Web 服务的处理时间要比业务逻辑 Java 代码的处理时间高出 100 到 300 倍。但是,为了演示同步调用模型,我们挑选了一些不太符合现实的参数,比如,Web 服务性能极其快,或者应用服务器速度很慢,或两者兼有。 让我们假设连接池的容量为 2。因此,同一时间内只能处理两个数据库事务。(对于真实的应用服务器,实际的线程数和连接数要比这个数大)。 我们还假设 Web 服务调用使用的时间相同并且全部可以并行处理。这一假设比较符合实际,因为 Web 服务交互过程包括来回发送数据。执行实际的处理只是 Web 服务调用的一小部分。 对于这种场景,同步和异步用例在低负载下表现相同。如果数据库查询和 Web 服务调用并行进行,异步用例表现更加良好。在发生超载时,比如访问量忽然达到峰值,将看到一个有趣的结果。我们假设同一时刻有 9 个请求。对于同步用例,servlet 引擎线程池有三个线程。而对于异步用例,我们只使用一个线程。 注意,在这两个用例中,所有 9 个连接在到达时全部被接受(大多数 servlet 引擎都会这样做)。然而,在处理前三个连接时,同步用例没有对接受的其他六个连接进行处理。 图 2 和图 3 是使用一个简单的模拟程序创建的,它分别模拟同步和异步 API 用例: 图 2. 同步用例 图 2 中的每个矩形表示流程的一个步骤。矩形中的第一个数字是流程编号(1 到 9),第二个数字是流程内的阶段编号。每个流程使用惟一的颜色标记。注意,数据库和 Web 服务操作位于单独的行中,因为它们分别由数据库引擎和 Web 服务实现执行。servlet 引擎在等待结果期间不执行任何操作。浅灰色区域表示空闲(等待)状态。 图表底部的菱形标记表示在该点完成了一个或多个请求。标记的第一个数字表示以抽象单位计算的时间;第二个使用圆括号括起的可选数字表示在该点终止的请求数。在图 2 中可以看到,前两个请求在点 32 处完成,最后一个请求在点 104 处完成。 现在假设数据库和 Web 服务客户机运行时支持异步接口。并且假设所有异步 servlets 只使用一个线程(但是,如果提供了额外线程的话,异步接口非常适合使用额外线程)。图 3 显示了结果: 图 3. 异步用例 Java EE:迎合Web 2.0(6)时间:2011-01-26 IBM Constantine Plotniko图 3 中有几处需要注意。第一个请求要比同步用例中晚结束 23%。但是,最后一个请求则快了 26%。并且所使用的线程只是同步用例的三分之一。请求执行时间的分布更加有规律,因此用户可以以更加有规律的速度接收页面。第一个请求和最后一个请求的处理时间相差了 80%。在同步接口用例中,这个值达到了 225%。 |
|||||||||||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |