#cpp #циклы #оптимизация
Периодически использую бесконечные циклы в отдельных потоках, например, для постоянного мониторинга новых сообщений. Естественно, простая запись 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 на скорость игры. Мой вариант со спячкой меня более чем устраивает, но все равно хочу знать "А можно сделать лучше?"
Ответы
Ответ 1
В много-поточной задаче нормальным является использование объектов синхронизации. В данном контексте вечный цикл не должен выполняться вообще. Поток должен всегда находиться в режиме ожидания. И выполняться только если это позволит объект синхронизации. Что то вроде этого: while(true) { wait(lock); test(); }
Комментариев нет:
Отправить комментарий