【UML用户指南】-24-对高级行为建模-进程和线程

目录

1、概念

2、主动类

3、通信

4、同步

5、常用建模技术

5.1、对多控制流建模

5.2、对进程间通信建模


 

在UML中,可以将每一个独立的控制流建模为一个主动对象,它代表一个能够启动控制活动的进程或线程。

进程是一个能与其他进程并发执行的重量级的流;

线程是一个能与同一进程中的其他线程并发执行的轻量级的流。

主动对象是类的一个实例,在这种情况下,它是主动类的实例。同样也像所有的对象一样,主动对象通过传送消息进行互相之间的通信,然而在这里,消息的传送必须扩充某些并发语义,以帮助同步相互独立的流之间的交互。
 

主动类是类的一种,所以具有类的所有通常部分,包括类名、属性和操作。主动类经常接收信号,通常把这些信号列在一个附加栏中。
 

3dc1af7591304beebf22b5d646e459c1.png

1、概念

主动对象 (active object)是拥有进程或线程,并能够启动控制活动的对象

主动类 (active class)是其实例为主动对象的类。

进程 (process)是能同其他的进程并发执行的重量级的流;

线程 (thread)是能与同一进程中的其他线程并发执行的轻量级的流。

在图形上,主动类用一个左右边为双线的矩形来表示。

进程和线程用衍型化的主动类来表示(而且也在交互图中作为一个序列出现)

一个主动类表示一个独立的控制流,而普通的类不能体现这样的流。

与主动类相比,普通类隐含地被称作被动的,因为它们不能独立地启动控制活动。

2、主动类

主动类拥有与所有其他类相同的特性。

主动类可以有实例;主动类可以有属性和操作;主动类也可以参与到依赖、泛化和关联(包括聚合)关系中;主动类可以使用UML的任何扩展机制,包括衍型、标记值和约束;主动类可以是接口的实现;主动类可以由协作实现,它的行为可以用状态机来说明;主动类还可以参与协作。

3、通信

当对象相互协作时,它们通过从一个对象向另一个对象发送消息来进行交互。

四种交互组合:

1)消息可以在被动对象之间传递。

假定在一个时间点只有一个控制流通过这些对象,这样的一个交其实就是对一个操作的简单引用。

2)消息从一个主动对象传送到另一个主动对象。

当这种情况发生时,就有了进程间的通信,并且有两种可能的通信类型:

一种类型是,一个主动对象可能同步地调用另一个主动对象的操作。这种通信具有会合的语义,即:调用者调用操作;调用者等待接受者接受这个调用;操作被引用;为基于接收者对象的操作和类的执行选择一个方法;方法被执行;一个返回对象(如果有)被回送给调用者;然后二者分别继续它们的各自独立的路径。在调用过程中,两个控制流的步调是固定的。

另一种类型是,一个主动对象可能异步地发送一个信号或调用另一个对象的一个操作。这种通信具有邮箱的语义,这意味着调用者发送信号或调用操作,然后就继续它自己的独立的路径。在此期间,接收者在(通过插入事件或调用队列)做好准备时才接受信号或调用,完成后继续执行它的路径。之所以称这种通信为邮箱,是因为这两个对象不是同步的,而是一个对象给另一个对象留下一个消息后就离开。

在UML中,用实心箭头来表示同步消息,用枝状箭头来表示异步消息

3)消息从一个主动对象传送到一个被动对象。

如果在一个时间点上,有多于一个主动对象通过一个被动对象传送它们的控制流,那么就出现了潜在的冲突。如果同时有多个对象写或者读写同一个属性,那就是真正的冲突了。

4)消息从一个被动对象传送到一个主动对象。

初看起来,这显得不合法,但如果记住每个控制流都是以某些主动对象为根,就会理解,从被动对象传送消息到主动对象与从主动对象传送消息到主动对象具有相同的语义。

1267c440d71949f7872264db36fd0728.png

4、同步

当同一时间在一个对象中有多个控制流时,就出现了问题。如果不小心,可能有一个以上的流来修改同一属性,破坏对象的状态或丢失信息。这是典型的相互排斥问题。

三种方法建模:

1)顺序的(sequential)。调用者必须在对象外部进行协调,使得在一个时刻对象中只有一个流。当有多个控制流出现时,就无法保证该对象的语义和完整性。

2)监护的(guarded)。当有多个控制流出现时,该对象的语义和完整性是通过把所有对受监护的对象操作的调用顺序化来保证的。其效果是,在一个时刻对象恰好只有一个操作能够执行,使之简化为顺序的语义。如果没有设计好,就会有死锁的危险。

3)并发的(concurrent)。当有多个控制流出现时,该对象的语义和完整性得到保证是因为多个控制流存取不相交的数据集合,或者只读取数据。可以通过仔细设计的规则来安排这种情况。

bef02c71c9c949749c9c3a0ad54e36a0.png

可以允许同时有多个读者,但只允许有单独一个写入者来修改concurrent特性

5、常用建模技术

5.1、对多控制流建模

在UML中,可以使用包含主动类和主动对象的类图(捕捉它们的静态语义)和交互图(捕捉它们的动态语义)来做此事。

9b7c153e5bd1409e8715b28c9c2d4739.png

上图显示了一个商务系统的进程视图的一部分。可以发现3个对象并发地把信息放入系统中:StockTicker、IndexWatcher和CNNNewsFeed(名称分别为s、i和c)。这些对象中的两个(s和i)与它们自己的Analyst实例(a1和a2)通信。至少对于这个模型来说,可以简单地假定这个Analyst一个时刻只有一个控制流在它的实例中是活动的。然而,Analyst的两个实例都同时与AlertManager(名称为m)通信。因此,m必须被设计为在多个控制流出现时能维持它的语义。m和c同时与t(一个TradingManager)进行通信。每个流都给定一个由拥有它的控制流来区分的序号。

5.2、对进程间通信建模

进程间通信有两种经典的方式,即消息传送和远程过程调用。

用异步通信对消息建模,用同步通信对远程过程调用建模。

0b7ada0678f74c9da8d5252d3ff38fd1.png

上图显示了一个分布式预订系统,它的进程跨越4个结点。每个对象都用process衍型来标记。每个对象还用一个 location 属性来标记,以说明它的物理位置。在Reserva-tionAgent、TicketingManager和HotelAgent之间的通信是异步的。

用一个注解来描述通信是建立在Java Beans消息服务上的。

在TripPlanner和ReservationSystem之间的通信是同步的。它们的交互语义可以在名为CORBA ORG的协作中找到。TripPlanner作为一个client工作,ReservationAgent 作为一个server 工作。通过放大这个协作,将发现有关服务器端与客户端之间是如何协作的细节。
 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024新版大屏互动微信上墙源码大屏互动神器年会婚庆微现场3D签到

2024年大屏幕互动源码动态背景图和配乐素材搭建教程 php宝塔搭建部署活动现场大屏幕互动系统php源码,可以用来构建具有互动功能的大屏幕系统,为活动现场提供各种互动体验。 修复版的系统源码在原有功能的基础上,增加了更加完善的用户体验和稳…

002-关于Geogebra软件的介绍及与MatLab的区别

为什么要学Geogebra? 因为和MatLab的科学计算相比,GeoGebra重点突出教学展示,对于教师、学生人群来讲再合适不过了,尤其是可以融入到PPT里边呈现交互式动画,想想听众的表情!这不就弥补了看到PPT播放数学公…

GIT 基于master分支创建hotfix分支的操作

基于master分支创建hotfix分支的操作通常遵循以下步骤: 切换到master分支: 首先,确保你的工作区是最新的,并且你在master分支上。如果不在master分支,你需要先切换过去。 Bash git checkout master 拉取最新的master…

STM32第十二课:ADC检测烟雾浓度(MQ2)

文章目录 需求一、MQ-2 气体传感器特点应用电路及引脚 二、实现流程1.开时钟,分频,配IO2.配置ADC的工作模式3.配置通道4.复位,AD校准5.数值的获取 需求实现总结 需求 使用ADC将MQ2模块检测到的烟雾浓度模拟量转化为数字量。 最后&#xff0c…

2.00004 优化器执行计划生成的流程是怎么样的?

文章目录 整体架构关键结构体PlannerInfo (pathnodes.h:195)PlannerGlobal (pathnodes.h:95)函数栈关键函数pg_plan_query (postgres.c:885)planner (planner.c:274)standard_planner (planner.c:287)subquery_planner (planner.c:628)整体架构 关键结构体 PlannerInfo (pathn…

Servlet_Web小结

1.web开发概述 什么是服务器? 解释一:服务器就是一款软件,可以向其发送请求,服务器会做出一个响应. 可以在服务器中部署文件,让他人访问 解释二:也可以把运行服务器软件的计算机也可以称为服务器。 web开发: 指的是从网页中向后…

JUC工具类: Semaphore详解

Semaphore底层是基于AbstractQueuedSynchronizer来实现的。Semaphore称为计数信号量,它允许n个任务同时访问某个资源,可以将信号量看做是在向外分发使用资源的许可证,只有成功获取许可证,才能使用资源。立刀旁 目录 # 带着BAT大厂…

EDA 虚拟机 Synopsys Sentaurus TCAD 2016.03 下载

下载地址(制作不易,下载使用需付费,不能接受的请勿下载): 链接:https://pan.baidu.com/s/1baw0IhmnFOKVkJMI3zkD_A?pwdcheo 提取码:cheo

联邦的基础配置

一、联邦的定义 联邦:在AS内部部署全互联的IBGP对等体可以很好解决IBGP路由传递的问题,但是扩展性低,大型网络中会带来沉重负担,针对此问题可以用路由反射器解决,也可以利用联邦解决,联邦也被称为联盟。大…

使用Qt制作一个简单的界面

1、创建工程 步骤一: 步骤二: 步骤三: 选择 build system,有qmake、CMake 和 Qbs 三个选项。 CMake 很常用,功能也很强大,许多知名的项目都是用它,比如 OpenCV 和 VTK,但它的语法繁…

2024最新!将mysql的数据导入到Solr

Solr导入mysql的数据 如何安装导入数据前准备配置Solr的Jar包以及Mysql驱动包1.1、将solr-8.11.3\dist下的两个包进行移动1.2、将mysql-connect包也移动到该位置1.3、重启Solr项目 配置xml2.1、第一步我们需要创建核心2.2、第二步修改xml(这里是结合19年的教程)2.3、 创建data-…

mybatis延迟加载

mybatis延迟加载 1、延迟加载概述 应用场景 ​ 如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。 延迟加载的好处 ​ 先从单表查询、需要时再从关联表去关联查…

C++ 数据库MySQL 学习笔记(3) - 数据库操作

C 数据库MySQL 学习笔记(3) - 数据库操作 视图操作 视图是从一个或多个表中导出来的表,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户可以不看整个数据库表中的数据,而只关心对自己有…

讨论Nginx服务器的反爬虫和反DDoS攻击策略

Nginx服务器是一个高性能的Web服务器和反向代理服务器,具有强大的反爬虫和反DDoS攻击能力。本文将讨论Nginx服务器的反爬虫和反DDoS攻击策略,并给出相关的代码示例。 一、反爬虫策略 爬虫是一种自动化程序,用于从互联网上收集特定网站的数据…

使用Petalinux设计linux系统

文章目录 1.通过 Vivado 创建硬件平台,得到 hdf 硬件描述文件2.设置 Petalinux 环境变量3.创建 Petalinux 工程4.配置Petalinux 工程5.配置Linux内核6.配置Linux根文件系统7.配置设备树文件8.编译 Petalinux 工程9.制作BOOT.BIN启动文件10.制作SD启动卡 1.通过 Viva…

GaussDB关键技术原理:高性能(三)

GaussDB关键技术原理:高性能(二)从查询处理综述对GaussDB的高性能技术进行了解读,本篇将从查询重写RBO、物理优化CBO、分布式优化器、布式执行框架、轻量全局事务管理GTM-lite等五方面对高性能关键技术进行分享。 目录 3 高性能…

.secret勒索病毒详解,如何防御网络隐秘威胁

引言: 在数字化日益普及的今天,网络安全问题愈发凸显,其中勒索病毒作为一种极具破坏性的恶意软件,给个人用户和企业带来了巨大的损失和心理压力。.secret勒索病毒,作为这一威胁中的佼佼者,以其高度的隐蔽性…

Android Graphics 显示系统 - BufferQueue的状态监测

“ BufferQueue作为连接生产者和消费者的桥梁,时刻掌握队列中每一块Buffer的状态,对于解决一些卡死卡顿问题很有帮助,辨别是否有生产者或消费者长期持有大量Buffer不放导致运行不畅的情况。” 01 — 前言 在Android系统中,应用U…

Redis基础教程(四):redis键(key)

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

MicroBin好用的粘贴板工具

有时候你可能想从一台电脑上粘贴文本到另一台电脑上,或者是你想要分享一张图片或者是一些文件,某些设备上登陆qq和微信有不太方便,那么就可以使用MicroBin,它不但可以实现跨设备复制粘贴的功能,还支持文件上传等功能 …