41. 进程间通信影响程序响应时间

来源:互联网 发布:8099端口是干嘛的 编辑:程序博客网 时间:2024/06/05 16:43

进程间通信影响程序响应时间

        响应时间对软件的可用性是至关重要的。没什么比等待软件响应更令人烦躁了,特别是与软件交互中涉及到了重复的激励和响应。我们会感觉软件是在浪费我们的时间、影响我们的产出。然而,糟糕的响应时间的产生原因并没有被认真分析,特别是现代程序中。很多性能管理的文艺仍然专注于数据结构与算法,一些在某些场景中可能导致不同结果的问题,但在现代的多层的企业应用程序中不太可能是决定性能的主要因素。
        当这些应用程序出现性能问题时,我的经验是在数据结构和算法中寻找可改进的地方往往不是正确的方向。响应时间很大程度上决定于激励各应架构中的远程进程间通信(IPC)的数量。尽管可能有本地的瓶颈,但远程进程间的通信往往起主导作用。每个远程进程通信都会给总的响应时间造成一定不可忽视的延时,这些单独的延迟会叠加到一起,特别是它们顺序发生时。
         使用对象关系映射的应用程序中的波纹式载入是一个首要的例子。波纹载入描述了为了创建一个对象图而顺序执行的很多个数据库调用以选择所需的数据(见 Lazy Load,《企业应用软件架构模式》,Martin Fowler著)。当数据库客户端是一个中间层的渲染网页的应用服务器时,数据库的调用通常是单线程中顺序执行的。他们单个的延时会累积到总的响应时间中去。即使每个数据库调用中用10ms,需要1000次调用的网页(这并不罕见)会花费至少10秒的响应时间。其它的例子包括Web服务调用,浏览器的HTTP请求,分布对象调用,请求回答报文,以及自定义网络协议中的数据网格交互。一个激励所需的进程间通信越多,总的响应时间就越大。
        有一些相对显著的、著名的减少每个激励的进程间通信的策略。一个是应用吝啬原则,优化进程间的接口,以便通过最少的交互来仅仅交换所需的正确数据。另一个策略是尽可能并行化进程间的通信,这样总的响应时间就主要由最长延时的通信决定了。第三个策略是缓存先前的通信的结果,这样后续可以通用本地缓存避免进程间通信。
         当你在设计一个应用程序时,请留意对于每个激励的进程间通信的数量。在分析性能差的程序时,我经常发现进程间通信与激励的比例一般是1000比1。减少这个比例,不管是通过缓存还是并行化,或者其它技术,比通过选择数据结构或者调整排序算法的效果要好得多。
原文:Inter-Process Communication Affects Application Response Time by Randy Stafford
原创粉丝点击