Лучший способ замедлить поток? Использование Sleep () в порядке?
Я написал библиотеку C ++, которая выполняет серьезную тяжелую работу с процессором (все это - математические вычисления и вычисления) и, если оставить ее на собственные устройства, будет легко потреблять 100% всех доступных ресурсов процессора (она также многопотоковая к числу доступных логических ядер на автомате).
Таким образом, у меня есть обратный вызов внутри основного цикла вычислений, который программное обеспечение, использующее библиотеку, должно вызывать:
while(true)
{
//do math here
callback(percent_complete);
}
В обратном вызове клиент вызывает Sleep (x), чтобы замедлить поток.
Первоначально клиентский код представлял собой фиксированный вызов Sleep (100), но это приводило к плохой ненадежной производительности, поскольку некоторые машины заканчивали математику быстрее, чем другие, но режим ожидания одинаков на всех машинах. Итак, теперь клиент проверяет системное время, и если прошло более 1 секунды (что == несколько итераций), он будет спать в течение полсекунды.
Это приемлемый способ замедления потока? Должен ли я использовать семафор / мьютекс вместо Sleep (), чтобы максимизировать производительность? Хорошо ли спит х миллисекунд за каждую 1 секунду обработки или что-то не так, что я не замечаю?
Причина, по которой я спрашиваю, состоит в том, что машина по-прежнему сильно перегружена, даже если таскман показывает, что процесс занимает ~ 10% процессорного времени. Я уже исследовал конфликты жесткого диска и памяти безрезультатно, так что теперь я задаюсь вопросом, вызывает ли способ, которым я замедляю поток, эту проблему.
Спасибо!