Периодически использую бесконечные циклы в отдельных потоках, например, для постоянного мониторинга новых сообщений. Естественно, простая запись
while(true) {
test();
}
отнимает львиную долю мощности процессора (в моём случае 30%). Для решения этой проблемы я после каждого такта цикла даю ему поспать на пару миллисекунд
while(true) {
test();
this_thread::sleep_for(chrono::milliseconds(50));
}
Благодаря этому нагрузка снижается до ~0.5% при отсутствие новых сообщений, и до ~8% при пиковой нагрузке.
О такой оптимизации, или о любой другой я не нашел информации вообще (плохо искал, да). Слышал только о оптимизации простеньких игр через
float time = clock.getElapsedTime().asMicroseconds();
clock.restart();
time = time/700;
и последующим умножением time на скорость игры.
Мой вариант со спячкой меня более чем устраивает, но все равно хочу знать
"А можно сделать лучше?"
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вывести на экран первые n чисел ряда ФибоначчиЦикл с параметром не использовать