如何监视繁忙线程的运行状况?

时间:2019-03-20 17:22:03

标签: linux multithreading message-queue

我正在一个具有多个线程的应用程序上工作,每个线程执行的任务彼此不同。还有一个healthMonitor线程,它通过定期发送心跳消息来监视各个线程的运行状况。在这些线程中,有一个线程T1将消息发布到另一个线程T2,以响应T2进行一些文件写入操作。

在极少数情况下,T1会在很长的一段时间内向T2发送大量消息,因此T2忙于文件写入操作。有时,这些文件写入操作可能很耗时,最多需要2秒才能完成。在这种情况下,T2不响应healthMonitor线程发布的心跳消息,从而导致healthMonitor线程终止该应用程序。

T2从同一messageQueue中读取所有传入消息,包括T1发布的消息和healthMonitor线程发布的监听消息。

此问题很少发生,无法随意复制,因此很难调试。

我得出的结论是,在这种情况下,有大量待处理的消息待处理,并且处理时间花费的时间过长,因此心跳消息保持未处理状态的时间过长。由于这个线程,T2不能及时响应healthMonitor线程。

我的问题是,处理此问题的正确方法是什么。我想到的几个选择:

  1. 限制来自线程T1的消息数。这种方法将减少线程T2的负载,但这是一种处理这种情况的好方法吗?
  2. 在消息队列中实现基于优先级的处理:可以将所有心跳消息添加到消息队列的开头,而不是添加到尾部,以便首先从队列中将其拾取。请注意,我们拥有用于线程间通信的消息队列的实现。
  3. 还是应该只专注于优化线程T2中的文件写入操作?

0 个答案:

没有答案