Как раз прерывания и вызывают переключение между потоками. В операционных системах реального времени нет "бессмысленного" переключения между потоками. Переключение происходит только в случае, если более приоритетный процесс требует немедленного исполнения. Это переключение инициируется в любом случае прерыванием. Еще переключение может происходить по запросу активной задачи (потока):Чтобы исключить простаивание процессора используется механизм прерываний и колбеков.
При этом достигается большее быстродействие так как не тратится время для бессмысленного переключения процессора между потоками.
Когда поток ожидает завершения какой-либо аппаратной операции, производится переключение на самый приоритетный из ожидающих потоков, а текущий задерживается до наступления прерывания по завершению. Также в системах реального времени процедура delay() не выполняет пустые циклы, а задерживает выполнение потока на заданное время. В это время выполняются другие потоки в соответствии с приоритетами.
Типичный пример - выдача данных в COM-порт. Можно выдавать байты, ожидая готовности передатчика, но тогда до тех пор, пока не выдастся последний байт, процессор не сможет ничем больше заниматься.На одном процессоре многопоточность лишь тормозит вычисления.
А можно подсунуть контроллеру СОМ первый байт и заниматься другими делами, по прерыванию по готовности передатчика обработчик прерывания должен просто подсунуть следующий байт.
Таким образом, драйвер СОМ-порта организует новый поток, занимающийся выдачей массива данных.
Можно таким образом одновременно выдавать разные данные по десятку различных СОМ-портов на фоне каких-либо математических вычислений.
Конечно, вычисления будут выполняться несколько медленнее из-за прерываний, но общее повышение быстродействия налицо!