c++ - 时序图 : Thread processing over messages in queue

标签 c++ multithreading asynchronous uml sequence-diagram

从序列图符号可以看出,同步调用异步调用具有“带实心头的实线”和分别为“细头实线”。

考虑这种情况;

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

现在,问题是;

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

最佳答案

  1. 使用带有空心箭头的实线。

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

async example1

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

async processing with delay

如果你真的想显示队列和轮询机制,你可以按如下方式进行,但注意现在所有消息都是同步的。

async implemented using sync messages

关于c++ - 时序图 : Thread processing over messages in queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34567400/

相关文章:

java - 我应该在虚拟机中使用多少个线程?

c# - 异步但不并行

c# - while 循环中的高 CPU 使用率,正在检查按键事件

javascript - 在 QTCreator C++ 控制台项目中包含 Google 的 V8 Javascript 引擎

c++ - mmap 从文件中读取陈旧的整数数组

c - 使用管道的 C 多线程聊天程序

java - 我应该在哪里放置@EnableAsync 注释

c++ - 预处理器或链接中是否包含库

关于从目录获取 ini 文件的 C++ simpleini 示例?

java - 如何在 Spring MVC 中监视执行器或其他任务执行线程