【问题标题】:Sequence Diagram : Thread processing over messages in queue序列图:队列中消息的线程处理
【发布时间】:2016-01-02 15:13:36
【问题描述】:

从序列图符号中可以理解,sync-callsasync-calls 具有“solid line with solid head”和“细头实线”。

考虑这种情况;

  1. 一些通知,确实在队列中添加了一条消息(现在这个异步线程在这里死掉了)。
  2. 已经有一个处理器线程,用于队列,它检查队列空状态,并继续处理队列中的消息,一个接一个(这个线程正在循环queue.empty() 检查,处理消息)

现在,问题是:

  1. 对于第一点,如何在时序图上将“平台通知”表示为一个事件? [我一直使用“虚线”和“事件名称” ,但从 UML 细节中读取,“虚线”通常用于返回]
  2. 对于第二点,如何展示与第一个线程不同的“处理器线程操作”?。因为,队列中消息处理的顺序不是按照消息添加到队列的顺序触发的(但顺序是异步遵循的)。

【问题讨论】:

    标签: c++ multithreading asynchronous uml sequence-diagram


    【解决方案1】:
    1. 使用带空心箭头的实线。

    2. 将处理器线程显示为单独的生命线。不要将队列显示为生命线,因为它只是实现异步消息传递的一种手段。我会这样建模:

    如果重要的是表明处理发生在消息发送之后,您可以在打开的箭头和处理之间留一些垂直空间(空闲时间),如下所示:

    如果你真的想展示排队和轮询机制,你可以这样做,但注意现在所有消息都是同步的。

    【讨论】:

    • 我看到了一种更可行的表示方式,使用“片段循环”。也就是说,将“处理通知”及其他内容放在“片段循环”下。 @www.admiraalit.nl 有多好?
    • 在三个图中的任何一个中,您都可以使用一个包含所有消息的循环片段。此外,在第三个图中,您可以插入一个额外的循环片段,嵌套在外部循环片段内,以仅在 isEmpty()-returning-true 消息上循环。这些片段的好处是,它更准确地定义了可能发生的事情,但代价是使图表变得混乱,并且可以说使其可读性降低。就个人而言,我更喜欢使用序列图来演示一个单独的场景,而不是所有可能场景的完整集合。
    • 好的,我知道了。但是,我同意“序列图”应该揭示一个用例/场景。但是,通过“循环片段”,它给出了一个清晰的画面,以及如何/谁进行进一步处理。条件 isEmpty(),对于循环片段可能有更广泛的范围,但对于当前序列图,它将只停留在一个上下文中。谢谢@www.admiraalit.nl。
    猜你喜欢
    • 2011-09-27
    • 1970-01-01
    • 2018-12-05
    • 2015-12-16
    • 2017-11-01
    • 2020-02-17
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多