【问题标题】:C++ boost::thread getting slower as program runsC++ boost::thread 在程序运行时变慢
【发布时间】:2018-10-17 10:30:38
【问题描述】:

我有带有 HMI 的 C++ 程序。每次用户在 HMI 上点击/按下按钮,都会进行一些计算。如果是单击,那么我会计算一次,如果是长按,我会一直计算直到用户释放按钮。

无论哪种情况,我都使用 boost::thread 进行计算。

我为每个计算创建线程如下:

additional_trajectory_calc_thread = boost::thread(boost::bind(&MyClass::populate, this, arg1, arg2,arg3)); Additional_trajectory_calc_thread.detach()

(additional_trajectory_calc_thread 是我班级的私人成员)

每次用户点击一次按钮时,该线程都会创建一次。并且每次用户按下按钮时,每 1 秒创建一个线程,直到他释放按钮。

当我第一次运行程序时,我的程序响应速度非常快,因此没有性能问题。但是当创建的线程总数达到 300 左右时(比如 50 次单击 + 250 秒的总按下时间),系统会变慢。

为什么会发生这种情况?每次创建线程时是否分配额外的内存?可能是这个原因吗?或者是其他东西?如何检查并找到根本原因?

提前致谢。

【问题讨论】:

    标签: multithreading performance boost


    【解决方案1】:

    您不应该在每次用户点击时都创建线程。只需创建一个线程或一个小的“线程池”并在每次点击时使用它。

    线程过多导致的性能下降因平台而异。在 Linux 上,这还不算太糟糕,但是您可以创建的线程数有一个上限。大多数程序只创建非常少量的线程,并将它们重用于多个活动。

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2018-04-23
      相关资源
      最近更新 更多