Concurrency 具有可变并发流数的UML活动图

Concurrency 具有可变并发流数的UML活动图,concurrency,uml,Concurrency,Uml,我正在努力在UML中建模,在这个场景中,并发流的数量是可变的。一个好的、简单的现实生活场景是一个共用乘车服务。对于第一个骑手来说,整个流程似乎很容易。然而,一旦第一个车手在车内,司机拿起第二个车手,就很难在图表上显示,因为现在车手1和车手2是并发流,这些并发流的数量总是可变的,介于0和车内最大座位的数量之间 建模这种行为的最佳UML图类型和技术是什么?我如何向观众解释和描述可变数量的并发流 观众是非技术性的,是高层管理人员/财务人员,因此我不想透露关于线程/类/对象的具体细节。 以下是我的尝试:

我正在努力在UML中建模,在这个场景中,并发流的数量是可变的。一个好的、简单的现实生活场景是一个共用乘车服务。对于第一个骑手来说,整个流程似乎很容易。然而,一旦第一个车手在车内,司机拿起第二个车手,就很难在图表上显示,因为现在车手1和车手2是并发流,这些并发流的数量总是可变的,介于0和车内最大座位的数量之间

建模这种行为的最佳UML图类型和技术是什么?我如何向观众解释和描述可变数量的并发流

观众是非技术性的,是高层管理人员/财务人员,因此我不想透露关于线程/类/对象的具体细节。

以下是我的尝试:

图表中显示的是对整个应用程序流程的分析。这具有一些示例性特征,显示了一个rider应用程序实例、一个服务器实例和一个driver应用程序实例。现在,您希望为任意数量的rider和driver应用程序实例显示这一点。这就是设计,因为包含多个rider实例的分析与一个实例的分析相同,因为单个rider应用程序实例之间没有交互(至少您的示例中没有给出)。对于驱动程序实例也是如此。这意味着并发只发生在服务器设计的范围内。在这里,你需要明确地处理这个问题。因此,首先,您应该开发一个处理不同客户端类型的静态设计,即,您应该为rider应用程序提供一个客户端外观,为驱动程序提供一个客户端外观。客户端和服务器之间的每次交互都有会话对象等。此外,还有一个包含服务器逻辑的服务器组件。现在,您需要决定服务器如何处理来自客户端的请求。由于每个客户机都有一个线程,这并没有什么好处,所以您有一个线程池和请求队列

对于每个服务器线程,您应该定义一个活动,显示如何处理数据,例如,出列、排序、处理数据,并且通过显示一次来完成。当需要在线程之间通信时,可以使用发送和接收消息操作,这是在活动之间进行同步和通信的正确模型元素。此外,您应该为客户端facades定义活动,显示如何从客户端应用程序接收数据并发送给他们。在这里,您的视图还应该关注实例

另一种可能性是使用状态图显示实例的状态,以及它们如何使用事件和操作进行同步。但这样一来,您想要显示的动作就不那么明显了


通常,在UML中,多线程的处理相当含蓄。这当然有一些缺点,也有一些好处。特别是,对于低水平设计(例如,安全关键系统)需要明确视图的复杂情况,这是一个问题。有一些专用的建模语言可用,例如AADL。对于大多数业务应用程序,尤其是非常大规模的应用程序,UML方法是好的,或者至少是绝对足够的。因为更明确的方法会导致更复杂的hingher级别的设计,目标是防止这种情况发生。

这里有另一种方法,在活动图上显示灰色的并发流,但也添加了额外的活动/状态图以显示驱动程序的透视图。除此之外,我添加了信号,因为它们应该描述异步活动

然而,我担心并发流仍然会令人困惑。在最简单的情况下,将有:1个服务器1个司机(司机应用程序)和多个司机(司机应用程序)。活动图上可见的内容表明,实际上存在多个驱动程序(驱动程序应用程序)


非常感谢您抽出时间回答我的问题。由于观众是非技术性的,作为高层管理人员/财务人员,我更愿意将低层次的细节(如线程/类)排除在外。我的重点是以可能最简单的方式解释有多个并发活动,它们可以异步启动/停止。我喜欢你指出服务器/乘客/司机实例的数量。