软件架构的数据流总结(二)

原创 2015年07月08日 11:13:58

8. Blackboard(有点像老师叫学生上黑板写东西,而不是学生随意上黑板写)



Blackboard是Knowledge Sources的通用数据结构,能够代表问题空间的所有状态,当需要分离的数据结构时,Blackboard可以分开为多个面板(panels)。Knowledge Sources 是解决问题方法的元件,它们之间没有链接。Scheduler(调度器)决定哪个知识源有机会改变blackboard,每一个循环,它都注意blackboard的改变,激活合适的知识源,然后选择其中一个并执行。典型的案例就是Hearasy-II,语音识别程序,speech可以在不同层次被识别。

应用场合:问题空间应当能被分解为不同的部分;问题需要不同形式的问题逼近,比如bottom-up和up-bottom推理。

Problems:一个相当好的选择标准(scheduler)是比较困难的。如果仅仅从队列中选择第一个的话,这种复杂的结构is overkill。

 9. Finite State Machine(有限状态机)


这可就完全里类似数字电路设计中的状态机设计。从FPGA出发,得到状态机的硬件实现;从应用程序出发,可以得到状态机的软件实现:当需要应用执行期间在某些特殊的阶段表现不同,我们就可以定义一些状态,然后制定状态转移的条件。

其实这种架构在数字逻辑电路中经常用到,不过software中这种思想也是比较常见的。由于比较简单,只要理解即可。

10. Process Control(过程控制)




实际上这种架构就是自动控制原理中的架构。比如温度控制,T作为controlled variable(控制变量),加热温度是Process,决定何时、以多大程度加热时Control。期望输出的温度叫做Set Point,加热器的状态叫做被控变量。因此,有以上两种情况:一个是开环,一个是闭环。如果温度是直接作为输入变量使用的,然后输出还反过来作为输入,这就是典型的feedback;而feedforward控制系统则间接的使用变量作为控制系统的输入。

上图从上到下:开环控制,闭环反馈控制,闭环前馈控制。具体的细节可以参看自动控制原理,这部分内容算是比较熟悉的。

 

11.  Multi AgentSystem(多自主系统)



MAS是分布人工智能的一个典型案例。当应用需要多个部分同时激活,不需要单独的解空间和集中控制,就可以采用这种多自治系统来构建。上图从上到下分为flat:directly contact with each other,fixed Hierarchy:lower and upper,Subsumption,Modular。

 

12. Broker / Service Oriented Architecture(面向代理/服务的架构)


你想让完成工作,而且并不关心是谁完成的,但你可能有一些需求来告诉你的broker,而你的broker会替你关注。应用场合:比如你去找代理帮你买房子,你只需要告诉他你能承受的最高价和另外一些需求,他就会帮你找,而你则完全不用知道housing business等。一般在网络服务中常常用到。

当client-sever的关系并不固定,因为有许多合适的servers或者可用的servers一直在变化;选择server的标准太复杂以至于需要分出一个元件来教授;渴望server的物理位置独立,即实现location transparency。

任何时间服务器都可以与broker注册和解注册,如果一个服务器失效(after a timeout),将会自动与broker解注册。当client申请特定服务时,将请求规范,并发送给broker,当broker找到合适的服务器时,client和server建立连接,而broker则退出。

问题是:要注意处理事务和异常。

 

13.  Master-Slave(主从)


看到这个架构,很自然就想到了DSP6678的一种典型的配置: 一个core当作master,其余7个core当作slave.

SETI项目是这个架构最成功的样例。他们要求全世界范围内计算机的所有者都能捐献一部分的空余的计算时间来处理大量的raw data。因此,创造了最大的分布式计算系统。SETI有一个单一中心的计算机,叫做Master,将数据包发送到Internet上的client电脑,每个client电脑将处理的结果发送回master server,master server把结果整合到数据库中,并喂给client更多的data。

当有足够的处理能力但是时间有限的情况下,可以采用这种分布式计算的架构。

Master有大量的独立的jobs需要执行,它将这些分立的job发送给它的slaves,然后这些slaves处理这些job,并将结果返回。类似SETI上面的解释。重要的是如何将任务分割成独立的。这种独立指的是每个任务不需要其他任务的计算结果,是完全可以独立执行的任务,即任务与任务之间是不存在依赖关系的。因此,在开发并行执行的程序时,或者分布计算的应用时,常常要进行这样的思考和构造。特别是DSP 6678这种多核架构的主从分布计算。

 

 

 

 

 

 

 

 

参考文献:http://www.dossier-andreas.net/software_architecture

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/lg1259156776/。

相关文章推荐

软件架构的数据流总结(一)

1. Model-View-Controller(MVC框架) This architecture is used in simpleGUI applications,不管是MFC,还是Matl...

软件架构风格整理(1 数据流风格)

1         数据流风格1.1      批处理序列批处理风格的每一步处理都是独立的.并且每一步是顺序执行的.只有当前一步处理完后.后一步处理才能开始.数据传送在步...

【算法集中营】计算两个日期之间的天数

/历法规定,四年一闰,四百年闰,例如2000年是闰年,2100年不闰年, //公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的就是平年 //计算两个日期之间的天数(C++)  ...

【Python开发】C和Python之间的接口实现

作者:Jerry Jho 链接:https://www.zhihu.com/question/23003213/answer/56121859 ## 更新:关于ctypes,见拙作 聊聊P...

Linux进程间的通信,信号量的使用,生产者消费者

这是简单的生产者消费者问题,只有一个缓冲区 #include #include #include #include struct sembuf buf; int Psem(int sem_i...

【计算机视觉】【图像处理】【VS开发】【Qt开发】opencv之深拷贝及浅拷贝,IplImage装换为Mat

原文:opencv之深拷贝及浅拷贝,IplImage装换为Mat  一、(1) 浅拷贝: Mat B; B = image // 第一种方式 Mat C(image); // 第二...

【Qt开发】QString与数字类型的转换(不同进制)

把QString转换为 double类型 方法1.QString str="123.45"; double val=str.toDouble(); //val=123.45 方法2....

C#中如何使用全局变量

很遗憾的是 C# 语言中没有全局变量!不知道设计的时候是怎么考虑的?滥用全局变量可能会引起程序的混乱,但是合理使用,也会带来很大的方便。     幸运的是,我们可以使用类里面的 static 字段曲折...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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