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