C ++ boost :: thread становится медленнее при запуске программы - PullRequest
0 голосов
/ 17 октября 2018

У меня есть программа C ++ с HMI.Каждый раз, когда пользователь нажимает / нажимает кнопку на HMI, выполняются некоторые расчеты.Если это один щелчок, тогда я выполняю вычисления один раз, а если это долгое нажатие, я продолжаю вычислять, пока пользователь не отпустит кнопку.

В любом случае я использую boost :: thread для выполнения вычислений.,

Я создаю поток для каждого вычисления следующим образом:

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

(Additional_trajectory_calc_thread является приватным членом моего класса)

Каждый раз, когда пользователь нажимает один раз на кнопку, этот поток создается один раз.И каждый раз, когда пользователь нажимает на кнопку, один поток создается каждую 1 секунду, пока он не отпустит кнопку.

Когда я впервые запускаю программу, моя программа очень отзывчива, поэтому проблем с производительностью нет.Но когда общее количество созданных потоков достигает примерно 300 (например, 50 одиночных кликов + 250 секунд времени печати), система замедляется.

Почему это может происходить?Выделяется ли дополнительная память каждый раз, когда создается поток?Может ли это быть причиной?Или что-то другое?Как я могу проверить и найти основную причину?

Заранее спасибо.

1 Ответ

0 голосов
/ 17 октября 2018

Вы не должны создавать темы каждый раз, когда пользователь нажимает.Просто создайте один поток или небольшой «пул потоков» и используйте его при каждом нажатии.

Снижение производительности из-за слишком большого количества потоков зависит от платформы.В Linux это не так уж плохо, но есть верхний предел количества потоков, которые вы можете создать.Большинство программ создают очень небольшое количество потоков и повторно используют их для нескольких действий.

...