Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Простая и легковесная кооперативная многозадачность для Z80 https://zx.oberon.org/forum/viewtopic.php?f=10&t=338 |
Страница 1 из 1 |
Автор: | Zorko [ 16 ноя 2017, 03:16 ] | ||
Заголовок сообщения: | Простая и легковесная кооперативная многозадачность для Z80 | ||
Мы с Лёшей Большаковым спроектировали и реализовали модуль для кооперативной многозадачности. Вот пример с летающими шариками, тут никакой синхронизации, всё дёргается. Но фишка не в этом. Все шарики двигаются внутри вот этой одной процедуры, выполняемой параллельно 8 раз: Код: "OBERON"
PUTSPR - процедура Сержа Колотова для вывода спрайта с пиксельной точностью. Я её не модифицировал для работы с буфером. И критики по поводу дёрганья шариков не жду. Именно для шариков лучше было бы делать всё в цикле. Это я так, для теста. Модуль Tasks и примеры его использования залиты в репозиторий. Переключение контекста задач очень легковесное, буквально несколько машинных команд. Вот документация на модуль: Код: "OBERON"
Каждая задача обладает своим собственным стеком и может иметь локальные переменные. Поэтому ей требуется своя память для работы. Для этого статически или динамически создаётся переменная, которая хранит память для задачи. Представлены следующие модели задач, отличающиеся размером стека: Код: "OBERON"
Модель Tiny имеет размер стека 40 байтов, и этого достаточно для обработки прерывания IM 1. Модель Low гарантированно упадёт при обработке прерывания IM 1 и нужна для особых случаев (работа в режиме DI). Код: "OBERON"
Код: "OBERON"
Код: "OBERON"
Код: "OBERON"
Код: "OBERON"
Run спроектирован таким образом, чтобы после каждого атома (Yield) отдавать управление основной задаче. Это может понадобиться для выполнения в основной задаче каких-то действий с более высоким приоритетом. Код: "OBERON"
Смотрите примеры работы с модулем Tasks: TestTasks и MoveBalls.
|
Автор: | prospero78su [ 23 янв 2018, 08:29 ] |
Заголовок сообщения: | Re: Простая и легковесная кооперативная многозадачность для Z80 |
Цитата: Возвращает количество запущенных задач. Как-то сразу вспоминаю недавний срач за углом)) Поводом послужило: На одном процессоре может быть несколько задач и один процесс. На нескольких процессоров может процессов по числу процессоров несколько задач на каждом процессоре)) |
Страница 1 из 1 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |