`
yesjavame
  • 浏览: 712643 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

UOP设计思想之异步处理

阅读更多
在WEB/WAP这种以http协议为主的大用户应用中,即时性是非常重要的一个指标.客户端对一个
请求的响应时间的感受,可以说是衡量大规模用户的WEB应用的第一指标.
适时地采用异步处理,不仅可以提高对客户端的响应速度,而且使交互过程更为可靠!

如果有些事我们不得不做,那就要看在什么时候做,让谁做更合适.软件设计中,我们总是把最难
实现的部分让API提供者来做.事实上让调用者来做和让API提供者来做,在整个流程中这个工作(最终会变
成CPU执行的指令序列)是无法缩减的,但放在最适合的地方,就使你的整个架构非常优雅.

同样,如果在一次请求响应中一段逻辑必须执行,除非用户要看到它的即时效果,否则你不应该
让它在交互过程中完成.所以异步调是一个非常好的解决方案.

象一些耗时的"后台操作",我们可以在当前应答处理中另外启动一个线程,而把用户最想看到的
内容即时反馈给用户.比如用户点击某一页面,要发一封信给某人.我们可以把发信的过程在新的线程中执
行,而当前响应的线程中告诉用户"已经成功发送信件给某人",这样真正发信要多久,并不影响用户看到这
个提示.
事实上对于"发信"这种动作,用户不可能即时知道结果,即使你的SMTP是101%的发送成功,但邮件
在网络中路由,以及收信方的邮件服务器的可靠都不是你能控制的,所以只要你"告诉用户信件已经发送"就
足够了,你不可能告诉他"信件已经成功被对方接收",万一那个新线程不知道什么不太可能的原因死了,用
户也无法追究你的提示是否可靠.

UOP思想的核心就是无论你如何实现,给用户以最好的感受是根本目的.其它的都只是手段.
异步调用不仅仅是提高交互的响应速度,而且是提高可靠性的手段.
无论如何你都无法保证"发信"这样的动作能100%连结到SMTP的服务器,如果不能连结,至少要超等
时以后才会继续执行,而此时往往发生异常.也就是用户在等待了超时的时候后还是看到出错的信息,这种
感受对你的应用威胁是致命的,所以如果在用户不可见线程中处理这个过程,用户就无法觉察.
很多例子是我们在处理一个请求时,要连结另一个URL或数据库,如果不是通过这些资源获取内容
向用户输出必要的信息,我们就没有必要在当前线程中处理,因为一旦你要连结的URL或数据库不能连结,在
等待很久后最终还是抛出异常.

我经常用的方案是把要处理的对象放到一个static的数据结构中,在正常的响应逻辑比如Servlet
的service方法中,只要把这个对象put到这个数据结构中就足够了,然后service方法继续执行与用户交互相
关的事,而后台启动专门的Listener来处理这些数据,这样即使这个Listener出现任何阻塞或异常,用户也是
不可知的.这种方案对于触发日志,通知等后台操作的处理非常合适.不仅仅加强交互界面的友好性,而且你
的架构逻辑结构也非常清析合理.

我经常用到的编程习惯是不在主要逻辑中实现具体方法.比如一个service方法,它要处理若干步骤.
如果有300行以上的代码,你的这个响应看起来就不够清析了.我一直是这样做:


publicvoidservice(argList.....){
step1();
step2();
step3();
step4();
step5();
........

}

privatevoidstep1(){
//具体操作
}
privatevoidstep2(){
//具体操作
}
privatevoidstep3(){
//具体操作
}
privatevoidstep4(){
//具体操作
}
privatevoidstep5(){
//具体操作
}

其他的如果要看你的这个逻辑过程,最先肯定要看service方法,只有简单几行,清楚地告诉他整个
过程要干什么.至于如何他可以看下面具体的实现.


事实上,异步处理本身正好就是这种编程习惯的一个扩展.既然它能提高用户交互的速度和保证交
互的可靠,又使你的结构如此优雅,那么,适时地使用异步处理吧!

分享到:
评论

相关推荐

    uop.rar_UOP_genesis_创世 类库_创世类库_网络创世纪

    UOP是为了优化游戏性能和降低网络延迟而设计的一种高效的数据传输协议。它将游戏中的对象状态(如玩家位置、物品属性等)打包成紧凑的二进制格式,从而减少网络传输的数据量。在游戏中,这种优化对于提升玩家体验至...

    FANUC机器人SYST-034 SOP或UOP的暂停信号丢失.docx

    在FANUC机器人的操作中,用户可能会遇到“FANUC机器人SYST-034 SOP或UOP的暂停信号丢失”的警告。这个警告属于WARN级别,表明系统检测到一个异常情况,但还不至于导致机器人完全停止工作。下面将详细解释这个警告的...

    FANUC机器人UOP信号功能详细介绍(UI输入+UO输出信号).docx

    FANUC机器人的UOP信号是其控制系统中关键的输入输出信号,用于实现与外部设备的交互和控制机器人动作。UOP信号分为UI输入信号和UO输出信号两部分。 UI输入信号共有18个,主要用于控制机器人的启动、暂停等操作: 1...

    22 用1602LCD与DS18B20设计的温度报警器.rar_UOP_基于proteus温度检测报警系统_温度报警

    "UOP"标签可能指的是使用了Proteus中的User Object Package,这是一个允许用户自定义元件的特性,可能在项目中用于模拟特殊硬件或定制的电路组件。Proteus是一款流行的电子设计自动化软件,支持虚拟原型设计和仿真,...

    霍尼韦尔UOP技术助力储油船天然气脱杂处理

    霍尼韦尔UOP技术在储油船天然气处理领域的应用是一项重要的技术创新,旨在解决海上天然气脱杂处理的挑战。在此次项目中,柏阁森海洋公司(BW Offshore)选择了霍尼韦尔UOP的技术,为其在苏格兰海岸新建的浮式生产储...

    UOP3CC计算机控制连续精馏塔在不同回流比和功率下的应用研究.doc

    这将为精馏塔的设计和操作提供重要参考。 计算机控制连续精馏塔的应用研究是精馏领域的一个重要方向。该研究不仅可以提高精馏塔的操作效率,还可以降低精馏塔的操作成本。因此,本文的研究结果对精馏领域的发展有着...

    FANUC机器人后台逻辑功能使用方法.docx

    FANUC机器人的后台逻辑功能是一种强大的工具,它允许用户在机器人执行任务的同时,持续不断地进行特定条件的判断和处理,不受系统急停、暂停或报警的影响。这种功能主要用于那些需要持续监控或处理的场景,确保即使...

    java面向对象笔试题-uop_cs1102:CS1102:编程I

    CS1102:程序设计Ⅰ 学习指南第 1 单元 ##Unit 1:编程、名称和事物简介 ##话题: 电脑操作简介 Java 简介、Java 虚拟机以及 Java 开发和运行时环境 面向对象编程 用户界面 一个基本的Java程序 变量和数据类型 ...

    方波、三角波发生器的设计

    - **输出电压**:测试输出波形的峰峰值Uop-p。 - **波形特性**:测试方波的上升时间tr和三角波的非线性失真系数((。 #### 实验内容 1. **设计电路**:根据给定的设计指标,完成电路的设计。 2. **安装与调试电路**...

    电源技术中的直流电源设计中一些问题的处理办法及其串联应用分析

    1.前 言  在电子电路中,通常需要直流电源供电。...本文以三相交流电源供电的直流电源设计为例,介绍直流电源设计中一些问题的处理办法。并就在实际应用中,多个直流稳压电源串联使用问题做了阐述

    Python库 | syst3m-2.11.9.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:syst3m-2.11.9.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    霍尼韦尔uop-未来炼厂白皮书之六大关键能效分析-2021.5-8页.pdf

    未来炼厂的概念与传统炼厂相比,发生了一系列重要变化。在过去的能源革命中,炼厂主要生产的燃料产品如汽油和柴油,现在随着电气化的趋势,需求正逐步下降。同时,人类社会对石化产品的依赖和需求正快速增长,尤其是...

    uop-tweaks:凤凰城大学网站的调整

    uop-user-style.css 紧凑型标头 标准化消息文本字体和大小 隐藏浮动谷歌工具 隐藏页脚 调整发布消息确认寡妇的大小 - 关闭窗口按钮不再隐藏 userstyles.org 凤凰城大学 - 紧凑论坛 自定义脚本 在 Firefox 上使用 ...

    UoP-Site:第一个使用HTML和CSS开发的网站

    考虑到“UoP-Site”可能需要适应不同的屏幕尺寸,开发者可能会应用响应式设计原则。通过设置断点并使用媒体查询,可以确保网站在小屏幕设备上也能良好展示,可能包括隐藏某些元素、调整布局或改变字体大小。 【优化...

    电子设计实验基础.pdf

    4. 输出纹波电压 ΔUop-p ≤ 5mV ,稳压系数 SU≤ 5×10-3 。 三、实验原理与分析 直流稳压电源的基本原理是由电源变压器、整流电路、滤波电路和稳压电路组成的。电源变压器将 220V 的交流电压变换成整流滤波电路所...

    订单上云方案.pptx

    总结来说,订单上云方案是针对高并发场景的一种架构设计,通过分布式消息队列、数据复制、云上云下架构的优化,以及数据库的拆分与迁移,以确保在双十一等大促期间能够高效、稳定地处理大量订单。同时,这个方案也...

    Intel CPU微架构简介.docx

    uop通过Decoder Queue和Scheduler进行调度和重排序,然后分配给计算单元执行计算任务,或者发送给访存单元处理内存读写。 Intel Sandy Bridge架构是一个典型的例子,它采用超标量设计,能够在每个CPU周期内并行执行...

Global site tag (gtag.js) - Google Analytics