Zeroith, используйте полностью статическую машину, которая может останавливаться во время простоя. Вы не можете победить ноль Гц.
Прежде всего, переключитесь на тикающий планировщик операционной системы. Пробуждение каждую миллисекунду или около того тратит впустую силу. Если вы не можете, рассмотрите возможность замедления прерывания планировщика.
Во-вторых, убедитесь, что ваш свободный поток находится в режиме энергосбережения, дождитесь следующей инструкции прерывания.
Вы можете сделать это в виде недостаточно регламентированного «пользовательского пространства», которое есть у большинства небольших устройств.
В-третьих, если вам нужно опросить или выполнить действия по обеспечению доверия пользователя, такие как обновление пользовательского интерфейса,
спи, делай это и возвращайся спать.
Не доверяйте инфраструктурам графического интерфейса, которые вы не проверили на наличие кода «спи и крутись».
Особенно таймер событий, который вы можете использовать для # 2.
Блокировать поток при чтении вместо опроса с помощью select () / epoll () / WaitForMultipleObjects ().
Делает нагрузку на планировщик потоков (и ваш мозг), но устройства обычно работают нормально.
Это немного меняет ваш дизайн высокого уровня; становится все чище!
Основной цикл, который опрашивает все, что вы можете сделать, медленно и бесполезно расходуется на процессор, но гарантирует производительность. (Гарантированно будет медленным)
Кэшируйте результаты, лениво создавайте вещи. Пользователи ожидают, что устройство будет медленным, поэтому не разочаровывайте их. Чем меньше бег, тем лучше. Беги как можно меньше.
Отдельные нити могут быть убиты, когда вы перестанете в них нуждаться.
Попытайтесь получить больше памяти, чем вам нужно, тогда вы сможете вставить в несколько хеш-таблиц и сохранить когда-либо поиск. Это прямой компромисс, если память является DRAM.
Посмотрите на систему реального времени, которая, по вашему мнению, может вам понадобиться. Это экономит время (так) позже.
Они лучше справляются с резьбой.