Overhead прерываний vs. Overhead SwapSet
Давайте посмотрим на цифры.Аргумент критиков: «SwapSet слишком медленный»
---
1. Разовый overhead
Параметр Прерывание SwapSet Время переключения ~150 тактов ~192 такта
Разница — всего ~40 тактов..
---
2. Суммарный overhead
Параметр Прерывание SwapSet Частота вызова 50 раз/сек (кадр) или 1000+ раз/сек (таймер) Несколько раз за программу Суммарные траты 7 500 тактов/сек (50 Гц) или 150 000 тактов/сек (1 кГц) ~1000 тактов за всё время работы
Здесь всё очевидно: прерывания стабильно «съедают» тысячи тактов каждую секунду, SwapSet же — копейки за весь прогон программы.
---
3. Разный контекст использования
• Прерывания — вынужденная плата за связь с железом. Все смирились: «так уж устроен Z80».
• SwapSet — осознанный инструмент. Его сразу критикуют: «зачем так дорого?»
На деле же и там, и там сохраняется/восстанавливается состояние ради изоляции контекста.
---
4. Цель SwapSet
SwapSet — не для tight loop и не для экономии каждого такта. Его задача:
• изолировать функции друг от друга;
• дать каждой задаче «свои регистры»;
• сделать код предсказуемым и модульным.
Цена в 192 такта оправдана, если цель — ясность и надёжность архитектуры.
---
5. Итоговый контраргумент
Если сообщество спокойно мирится с 7 500+ тактами overhead от прерываний каждую секунду, то почему вдруг 192 такта на SwapSet, вызываемый пару раз за программу, объявляется непозволительной роскошью? Это ровно тот же приём — сохранение состояния ради изоляции, только на уровне приложений, а не железа.




Ответить с цитированием