当前位置:网站首页>UML系列文章(23)高级行为---进程和线程
UML系列文章(23)高级行为---进程和线程
2022-06-09 06:26:00 【CoderIsArt】
- 主动对象、进程和线程
- 对多控制流建模
- 对进程间通信建模
- 建立线程安全的抽象
现实世界不仅是一个严厉无情的地方,而且还是一个非常忙碌的地方。一些事件和事情都在同一时间发生。因此,当对现实世界的系统建模时,必须考虑它的进程视图,包括形成系统的并发与同步机制的线程和进程。
在UML中,可以将每个独立的控制流建模为一个主动对象,它代表一个能够启动控制活动的进程或线程。进程是一个能与其他进程并发执行的重量级的流;而线程是一个能与同一进程中的其他线程并发执行的轻量级的流。
建立抽象,使它们在多控制流同时存在的情况下安全地工作,这是困难的。特别是,不得不考虑比顺序系统更复杂的通信和同步方法。还得非常小心,对进程视图的工程化程度既不能过度(太多的并发流会使系统产生颠簸),也不能过低(并发不足则不能优化系统的吞吐量)。
1. 入门
在UML中,每个独立的控制流被建模为一个主动对象。主动对象是一个可以启动控制活动的进程或线程。像所有的对象一样,主动对象是类的一个实例,在这种情况下,它是主动类的实例,同样也像所有的对象一样,主动对象通过传送消息进行互相之间的通信然而在这里,消息的传送必须扩充某些并发语义,以帮助同步相互独立的流之间的交互。
UML提供了对主动类的图形化表示,如图所示,主动类是类的一种,所以具有类的所有通常部分,包括类目、数学和操作。主动类经常接收信号,通常把这些信号列在一个附加栏中。

2. 术语和概念
主动对象(Active object)是拥有进程或线程,并能够启动控制活动的对象。主动类(Active class)是其实例为主动对象的类。进程(process)是能同其他的进程并发执行的重量级的流;而线程(Thread)是能与同一进程中的其他线程并发执行的轻量级的流。在图形上,主动类用一个左右边为双线的矩形表示。进程和线程用衍化的主动类来表示(而且也在交互图中作为一个序列出现) 。
2.1 控制流
就是一个线程的执行轨迹。
在一个并发系统中,存在多个控制流---也就是说,在一个时间有多件事情发生。在一个并发系统中,有多个同时发生的控制流,每个控制流都以一个独立的进程或线程的头部为根。如果在并发系统运行时给它拍一个快照,在逻辑上,将看到多个执行点。
在UML中,用主动类来表示进程或线程。进程或线程是一个独立的控制流的根,并且与所有同样的控制流并发。
可以用下面三种方法之一获得真正的并发:
- 把主动对象分布到多个结点上;
- 把主动对象放在多个处理器的结点上;
- 以上两种方法的结合
2.2 类和事件
主动类依然是类,尽管它具有很特殊的性质。一个主动类表示一个独立的控制流,而普通的类不能体现这样的流。与主动类相比,普通类隐含地被称作被动的,因为它们不能独立的启动控制活动。
主动类用于对进程或线程的公共家族建模。在技术术语中,这意味着一个主动对象将一个进程或线程具体化。通过用主动对象对并发系统进行建模,就为每个独立的控制流起了一个名字。当创建一个主动对象时,其相关的控制流被启动;当撤销这个主动对象时,其相关的控制流就被终止。
主动类拥有与所有其他类相同的特性。主动类可以有实例;主动类可以有属性和操作;主动类也可以参与到依赖、泛化和关联(包括聚合)关系中;主动类可以使用UML的任何扩展机制,包括衍型、标志值和约束;主动类可以是接口的实现;主动类可以由协作实现,它的行为可以用状态机来说明;主动类还可以参与协作。
被动对象和主动对象均可以发送和接收信号事件及调用事件。主动类的使用是可选的。实际上它对语义没有增加什么。
2.3 通信
当对象相互协作时,它们通过从一个对象向另一个对象发送消息来进行交互。在一个既有主动对象又有被动对象的系统中,有四种必须考虑的可能的交互组合。
- 被动对象-》被动对象
- 被动对象-》主动对象
- 主动对象-》主动对象
在UML中,用实心箭头来表示同步消息,用枝状箭头来表示异步消息,

- 主动对象-》被动对象
2.4 同步
想象一下交织穿梭于一个并发系统的多个控制流。当一个流通过一个操作时,就说在给定的时刻控制焦点在这个操作中。如果这个操作是为某些类定义的,那也可以说在给定的时刻控制焦点在这个类的一个特定实例中。在一个操作中可以有多个控制流(因而在一个对象中也是如此),并且在不同的操作中也可以有不同的控制流(但仍导致一个对象中有多个控制流)。
当同一时间在一个对象中有多个控制流时,就出现了问题。如果不小心,可能有一个以上的流来修改同一属性,破坏对象的状态或丢失信息。这是典型的相互排斥问题。对这个问题处理的失败可能会产生各种竞争条件和冲突,导致并发系统以一种神秘的而不可再现的方式失败。
解决这个问题的关键是逐个进行对临界对象的存取。有三种可供选择的方法。每一种方法都包括向类中所定义的操作附加某些同步特性。在UML中,可以对三种方法建模。
1)顺序的(sequential)。
调用者必须在对象外部进行协调,使得在一个时刻对象中只有一个流。当有多个控制流出现时,就无法保证对象的语义和完整性。
2)监护的(guarded)
当有多个控制流出现时,该对象的语义和完整性是通过把所有对受监护的对象操作的调用顺序化来保证的。其效果是,在一个时刻对象恰好只有一个操作能够执行,使之简化为顺序的语义。需要设计好,否则有死锁的危险。
3)并发的(concurrent)。当有多个控制流出现时,该对象的语义和完整性得到保证是因为多个控制流存取不相交的数据集合,或者只读取数据。可以通过仔细设计的规则来安排这种情况。

3. 常用建模技术
3.1 对多控制流建模

3.2 对进程间通信建模

4. 提示和技巧
一个结构良好的主动类和主动对象,应满足如下要求:
- 表现一个独立的控制流,该控制流最大限度的挖掘了系统中真正并发的潜力。
- 粒度不要过细,否则需要大量的其他主动元素,从而导致一个设计过度的、脆弱的进程体系机构。
- 仔细地处理对等的主动元素之间的通信,在异步和同步的消息传送之间做出选择。
- 仔细地将每个对象处理为一个临界区域,使用合适的同步特性,以便在出现多控制流时能维持它的语义。
用UML绘制一个主动类或主动对象时,要遵循如下策略:
- 如果建模工具允许,只显示那些对理解其语境中的抽象是重要的属性、操作和信号,通过对过滤能力隐藏其他信息。
- 显式地表示所有操作的同步特性。
边栏推荐
- adam 神经网络
- TypeScript
- Implementation of Excel piecewise linear interpolation function
- RuntimeError: Dataset not found or corrupted. You can use download=True to download it
- 内核中的互斥与同步
- MySQL password is correct but cannot log in
- 邂逅 NodeJS
- Powerdns 1- introduction and installation
- Modularity in typescrtipt
- Quanzhi H3 was discontinued, and a40i/t3 was even better -- com-x40i core module came
猜你喜欢

Mutual exclusion and synchronization in kernel

Two integers compare sizes. Why is 100 equal to 1001000 not equal to 1000?

BSP tailoring of Quanzhi platform (3) Appendix II: description of kernel hacking configuration

Avez - vous vraiment compris l'entropie (y compris l'entropie croisée)

DNS principles 01 introduction to DNS principles

The BSP tailoring of the Quanzhi platform (1) kernel tailoring -- tailoring of debugging tools and debugging information

TypeScript

Exponential moving weighted average

基于国产全志A40I的机器人示教器解决方案

Analysis and Discussion on security level of 6-bit password lock
随机推荐
Codeblocks项目窗口管理
Lazy counter
全志平台BSP裁剪(6)附件三--rootfs menuconfig配置说明
Quanzhi v3s learning record -- use of esp8089
MySQL federated query
卷积神经网络概述以及简单案列
uniapp引入线上js
Quanzhi t7/t507 qt5.12.5 transplantation record
Quanzhi v3s learning record (12) use of rtl8723bs
Svn account password search
Introduction to bladed fault simulation method
MySQL 5.7 安装教程(全步骤、保姆级教程)
sudo: gedit:找不到命令
全志平台BSP裁剪(3)附件二 Kernel hacking配置说明
Etc. sudo permission configuration
工业级AM335X核心模块选型
Chapter_05 使用Opencv相加(融合)两个图像
CodeBlocks always repeat the last result
全志V3s学习记录(11)音频、视频使用总结
Warning : `load_ model` does not return WordVectorModel or SupervisedModel any more, but a `FastText`