чтобы абстрагировать ивентлуп у раста есть некоторые интересные заходы в этом направлении, например https://embassy.dev/
я не увидел в целом ответа нафига асинк на бареметале?
чтобы иметь таск менеджмент не таща RTOS
весь таск-менеджмент будет обработка прерываний.
во-первых, это не совсем так — асинк кооперативный, поэтому даже если прерываний не происходит вообще мы можем запускать другие таски когда нам отдали контроль во-вторых, смысл в том, чтобы писать более прямолинейный код на уровне тасок, абстрагировав детали менеджмента тасок в библиотеку
суммарно можно иметь шедулинг тасок (включающий в себя обработку прерываний) в либе и писать сравнительно высокоуровневый код в приложении, и при этом не платить за полноценную RTOS
Асинк вот нихрена не кооперативный, т.к. задачи в рамках одного евентлупа выполняются строго последовательно и прерываются не по таймслотам и прерываниям, а исключительно внутри кода задачи. если задача не отдаст управление в евентлуп - нихрена не произойдет и никакого переключения не будет.
ртос и выполняет шедулинг, т.к. в асинке шедулера вобщем-то и нет.
«кооперативный» как раз и значит, что задача может отдать управление в ивентлуп (в отличие от вытесняющего, когда управление силой можно отобрать)
тьфу, да. устал уже, термины путаются.
А ради смеха можешь дискетку на win 3.11 поформатировать - как-раз кооперативная многозадачность.
асинк с точки зрения нима это вообще набор макросов конкретный асинк рантайм может включать в себя шедулер который как-то выбирает, как и когда выполнять таски отличие от RTOS тут в том, что между шедулером и таской нет контекст свитча + они скомпилированы (и оптимизируются, включая dead code elimination) вместе
по сути получается, что программа сама себе RTOS с кооперативными тасками понятно, что если у тебя кооперативная многозадачность, то нужно быть аккуратным и не забывать отдавать управление, чтобы другие таски могли сделать прогресс
Ты тёплое и мягкое путаешь. Любая РТОС ориентирована на обработку событий реального времени (максимально быстрая реакция на прерывания), ты никак не сможешь достигнуть этих результатов в любом асинхронном коде какой-бы там монструозный шедулер ни был-бы написан. QNX - RTOS, к примеру.
Ну знаешь, если-бы всё так было просто, то нахрена было-бы выдумывать все эти реалтайм оси. Вон даже для ядра линуха, который и так с вытесняющей многозадачностью, есть набор патчей который превращает его в ртос. А насчёт неочевидно для кооперативной многозадачности: 1. Тебе пришло прерывание. 2. У тебя выполняется непрерываемая задача. 3. Ты ставишь прерывание в очередь шедулера. 4. Когданить (возможно и через полчаса если у тебя п.2 ресурсоёмкая и синхронная) у тебя сработает возврат в шедулер и начнёт обрабатываться первое прерывание. 5. У тебя уже херова гора таких прерываний в шедулере. 6. ЖОПА :) Я кагбэ много времени работал с низким уровнем и знаю как это всё работает и когда что можно применять, а когда нет.
Обсуждают сегодня