C ++ boost :: thread在程序运行时变慢

时间:2018-10-17 10:30:38

标签: multithreading performance boost

我有带有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秒)时,系统就会变慢。

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

谢谢。

1 个答案:

答案 0 :(得分:1)

您不应每次用户单击时都创建线程。只需创建一个线程或一个小的“线程池”,然后在每次点击时使用它即可。

由于线程过多而导致的性能下降因平台而异。在Linux上还不错,但是可以创建的线程数有上限。大多数程序仅创建很少数量的线程,并将其重用于多个活动。