time - 在事件图中表达并发性和时间

标签 time concurrency uml diagram activity-diagram

我不确定如何使用事件图来表达我的场景:

UML activity diagrams

我试图形象化的事实是:

  • 收到消息
  • 发生了两个独立且并发的操作:记录消息和处理消息
  • 记录总是比处理花费的时间少

图表中的第一个事件是正确的,因为操作是独立的,但它没有反射(reflect)日志记录保证比处理花费的时间更少的事实。

图中的第二个事件是不正确的,因为即使日志记录在处理之前完成,处理看起来好像取决于日志记录首先完成,但这并不代表现实。

这是一个与计算机无关的例子:

  • 你是观鸟的新手,试图在笔记本上做关于路过的鸟类的第一个笔记

  • 一群鸟儿靠近,您尝试识别尽可能多的细节

  • 你想在笔记本上写下细节,但是等一下,你开始意识到你的理论背景在实践中行不通,应该是快速涂鸦的东西最终什么都没有,因为你做到了什么都认不出来

  • 其间,鸟儿不等你,就威严地飞走了,事件结束了

  • 或者你真的写下来了,只是片刻,鸟儿还在附近,慢慢地飞走了,过了一段时间又结束了事件

  • 或者您可能因为敬畏而一直注视着它们,没有做任何笔记 - 它们飞走了,消失在地平线上,结束了事件

  • 几个小时后,您有了足够多的笔记,然后非常高兴地回家了 - 也许您没有捕捉到所有内容,但这足以让您微笑

我总是可以在图表中添加注释来以某种方式表达它,但我想知道,是否有更结构化的方式来表达我在事件图中描述的内容?如果不是事件图,那么您认为哪种图更适合?谢谢。

最佳答案

您的第一个图表假设记录的持续时间总是比处理的时间短:

  • 如果这个假设是正确的,则上层流到达流最终节点,其余流继续,直到第一个流到达事件最终节点。此处,处理继续,事件在处理结束时结束。这正是您想要的。
  • 但如果有一次,执行会偏离这个假设并且日志记录会因任何原因而延迟,那么处理的末尾将到达事件最终节点,导致所有其他正在进行的事件立即中断。所以日志记录不会完成。也许这对您来说不是问题,但在大多数情况下,审计期望日志是完整的。

您可能对添加连接节点的更安全的方法感兴趣:

enter image description here

优点是事件不依赖于任何假设。它总是有效的:

  • 每当日志记录速度更快时,该流上的 token 将在连接节点等待,一旦流程完成,事件(安全地)就可以发生连接并且传出 token 到达末尾。这正是您目前所期望的。
  • 如果日志记录特别慢,没问题:处理将结束,但事件将等待日志记录完成。

这种健壮的表示法使日志记录就像盒子里的薛定谔的猫:我们不必知道什么事件更长或更短。在事件结束时,两个 Action 都已完成。

事件图中的时间?

事件图并不是真正用来表达时间和持续时间。它与控制流和同步有关。

但是,如果时间对您很重要,您可以:

  • 在视觉上使一项事件比另一项事件短。从正式的 UML 角度来看,这是非常模糊和绝对没有意义的。但是,当读者看到并行流程(一种潜意识交流 ;-) )时,它是直观的。
  • 添加注释以用简单的英语表达您的假设。这具有非常明确和明确的优势。
  • 使用 UML 持续时间约束。这在时序图中经常使用,有时在序列图中使用,但一般不会在事件图中使用(我个人从未见过,但 UML 规范也不排除它)。

时间在 UML 规范中是非常通用的东西,并且独立于图表定义。例如:

8.4.4.2: A Duration is a value of relative time given in an implementation specific textual format. Often a Duration is a non- negative integer expression representing the number of “time ticks” which may elapse during this duration.

8.5.1: An Interval is a range between two values, primarily for use in Constraints that assert that some other Element has a value in the given range. Intervals can be defined for any type of value, but they are especially useful for time and duration values as part of corresponding TimeConstraints and DurationConstraints.

在您的情况下,您有处理的持续时间观察(例如 d )和日志记录的持续时间限制(例如 0..d )。

8.5.4.2: An IntervalConstraint is shown as an annotation of its constrainedElement. The general notation for Constraints may be used for an IntervalConstraint, with the specification Interval denoted textually (...).

不幸的是,没有多说什么了。唯一的图形示例是序列图中的消息(图 8.5 和 17.5)和时序图(图 17.28 到 17.30)。尽管如此,该符号可以推断为事件图,但它太不常用了,我宁愿推荐注释。

关于time - 在事件图中表达并发性和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66015838/

相关文章:

javascript - 随着时间的推移在 jquery 中循环文本

c - 嵌套for循环的时间复杂度

外部共享资源(智能卡)的 Java 并发模式

java - 无法让java使用多个核心

java - 复合图案的正确使用

c# - 数据服务返回对象时的类组成问题

php - 用户在时间范围内登录

c++ - 有没有办法以毫秒为单位计算程序的时间复杂度?

node.js - V8 引擎在 Node.js 中扮演什么角色?

uml - 系统序列图 - 系统可以请求 Actor 输入吗?