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