软件架构设计中的同步与异步问题.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件架构设计中的同步与异步问题

软件架构设计中的同步与异步问题BLOG?LIOU内容概要:本文分析了大型程序系统设计中经常需要面对的同步和异步结构问题。列举异步结构模式实现手段,论证异步模式效率远远优越于同步模式,证明在硬件资源理想情况下,对同步模式而言并发量对计算机系统的平均交易处理时间没有影响,对异步模式而言平均交易处理时间会随着并发量的增大而急剧下降,最终也趋向一个恒定值。在实际有限计算机资源情况下,程序设计必须设置最大并发量以控制并发程度,否则过多并发量会形成交易对硬件资源的竞争,造成交易的拥塞。关键词:同步,异步,消息队列,效率,并发一.基本概念同步和异步问题是大型程序设计中需要慎重等待的问题,但目前这方面的讨论很少,本文就试图进行有关方面讨论。一个大型的程序系统常常是由很多不能功能模块组成的。程序系统运行时不同功能模块要按一定顺序执行,以协同完成一件任务。功能模块协作运行完成一件任务存在同步和异步两种方式。如果在某一时间段,这个程序系统的所有功能模块都在为完成相同的一件任务而服务,某一个功能模块在完成一件任务的子任务后,需要等待其他功能模块完成子任务,这样只有当全部功能模块按顺序完成一件任务后,程序系统才能接收下一个任务,功能模块是串行运行,这称之为同步模式。反之,在某一时间段,这个程序系统的不同功能模块可以独立运行完成一件任务的子任务,无须等待其他功能模块完成子任务就可以继续处理下一件任务的子任务,功能模块是并行运行,这称之为异步模式。打个比方,在一个生产流水线上有A和B两道工序,如果工位A完成自己任务,把任务传递给工位B后,需要等待工位B完成工序后,工位A才能开始下一件产品工作,这就是同步模式。如果工位A在把任务传递给工位B后,工位A不等待工位B是否完成任务,就开始下一件产品的任务处理,这就是异步模式。又比如,现代战斗机发射导弹过程也经历了从“同步”走向“异步”的过程。早期的导弹性能还不太完善,战斗机发射导弹后,需要飞行员照顾导弹飞行,直到导弹命中目标,这就是“同步”过程。后来,导弹性能越来越先进,出现了“发射后不管”导弹,即战斗机发射完导弹后,导弹会自动寻找并击中目标,飞行员发射导弹后可以不再管导弹飞行过程,不再理会导弹是否会命中目标,而可以开始捕捉下一个目标,这就是“异步”过程。反映在OLTP程序系统中,一个交易就是一个任务。如程序系统一次只完成一个交易,在这个交易没有完成前,程序系统不接受其他交易,这就是同步模式。如程序系统把交易任务分拆成几个独立的子进程,每个子进程独立完成交易的一个子任务,几个子进程同时运行,这就是异步模式。由于交易在模块之间是按照一定顺序运行的,所以对一个具体交易而言,模块之间任务执行时并不表现为并行运行,但对大批量交易的宏观效果而言,模块之间却是表现为并行运行。二.实现问题????在多功能模块的程序系统设计中,最重要的是要考虑模块之间的通信或数据传递。同步结构的程序实现很简单,常见情况是把所有功能模块编译在同一个程序中,这样实现数据共享不难,有些情况是利用函数参数传递共享数据,通过CALL调用,来执行下一个功能模块,所以同步结构的功能模块一般是不能独立运行的,但通信模块除外,因为同步的通信模块本身就可以通过SOCKET等通信机制来传递共享数据,所以是可以独立运行的。异步结构的实现稍微复杂一些。因为要求异步结构程序系统的不同功能模块作为独立进程能够独立运行,但在非通信进程模块之间,在进程间就存在共享数据鸿沟,每个独立进程就象一个个信息孤岛,这就要求进程间能够实现通信以在进程间传递数据。在UNIX系统平台上,提供了进程间通信(Interprocess?Communications)即IPC机制。IPC种类很多,有:带锁机制的规则文件(Regular?files?with?locking)--可以对规则文件使用适当的锁机制,用文件作为共享数据载体来实现进程间通信、管道(PIPES)、SOCKETS、信号(Signals)等。以上几种IPC方式在普通进程间通信是有缺陷的。使用带锁机制的规则文件,因为要读写硬盘文件,所以效率低,而且文件要上锁以保证多个进程不能同时修改一个文件,所以会造成进程等待而影响效率。SOCKETS主要是用来进行通信程序设计,管道和信号不能共享大量数据。在普通进程间要实现数据共享,实际有效通信的常用IPC工具是这三种:消息队列(Message?Queue)、共享内存(Shared?Memory)信号灯(Semaphores)在实际应用系统开发中,消息队列使用得最多。消息队列实际上就是一个可以读写应用数据的内存块。它可以被不同的进程读写。比如下图表示有三个进程向一个消息队列写信息,有一个进程从该队列中读取信息。?图?1消息队列示意图在消息队列的基础上,一些厂商提供了性能更好、功能更多的“消息队列”产品,

文档评论(0)

ranfand + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档