Диспетчер задач. Инь и Ян.

Ответить
Аватара пользователя
Dryundel
Полковник
Сообщения: 2500
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 12 раз
Поблагодарили: 144 раза

Диспетчер задач. Инь и Ян.

Сообщение Dryundel »

Предисловие.

С девятой версии FLProg в штатных инструментах появился диспетчер задач. Авторство этого нововведения принадлежит тому "Кого нельзя называть". Но наверняка все о нём, если и не знают, то догадываются. Для этого программу FLProg нафаршировали демоническими библиотеками. Я не скажу что эти библиотеки плохо работают. Наоборот, это весьма умный и продвинутый подход в сфере программирования на FBD (Function Block Diagram). Демонические они потому, что как и всё демоническое, покрыты мраком. Никто, повторюсь НИКТО из пользователей FLProg, кроме самого Демона не сможет в них до конца разобраться, а тот кто способен, не будут этого делать. Ибо для практического применения вне среды FLProg в целом они не пригодны, в том числе и потому, что постоянно трансформируются.
В этой статье я постараюсь пролить свет на основные моменты нового функционала под таинственным и величественным названием ДИСПЕТЧЕР ЗАДАЧ. Мы не будем вникать как он устроен, а разберёмся как этим чудом пользоваться. Во всяком случае на этапе версии FLProg 9.4.x.

Часть первая "Не так страшен Чёрт, как его малюют"

Практически изначально Автором FLProg задуманы платы в проекте. По сути это независимые кусочки кода которые можно двигать вверх или вниз относительно их взаимного расположения в теле пользовательской программы. От их расположения зависит и очередность выполнения в цикле. Схематично это выглядит так...
.
Диаграмма 1.jpg
.
Все платы в цикле выполняются по порядку и время каждого цикла является суммой времени выполнения каждой из плат. Соответственно, если у вас большая программа то и время цикла может возрастать до неприличных величин и те блоки, работоспособность которых критически зависит от величины таймаута между их выполнением, перестают адекватно работать. Контроллер начинает тормозить и глючить.
Другим же блокам таймаут не важен и бывает даже наоборот, желательно чтобы они выполнялись, например не чаще одного раза в секунду. Чтобы распределить ресурсное время в соответствии с потребностями блоков и был внедрен диспетчер задач. Он выстраивает платы не последовательно а в псевдо-параллель. Моделирует псевдо-многопоточность. Псевдо потому, что поток то у нас остался один и никуда от этого не деться. Условно это можно представить так...
.
Диаграмма 2.jpg
.
Теперь в каждом цикле выполняется всего одна плата. Однако суммарное время выполнения всех плат не изменилось, а даже слегка выросло. Дело в том, что для перезапуска цикла тоже требуется время, хотя и не большое. Последовательность выполнения выглядит так...
.
Диаграмма 3.jpg
.
Если как бы размотать этот клубок, то мы увидим, что ничего не изменилось и смысла использовать все платы со свободой задачей нет никакого. Однако это не совсем так. Дело в том, что помимо плат с вашими блоками существует и служебный код, который будет выполняться каждый цикл, в отличии от кода платы выполняемого один раз в четыре цикла.
Этот момент так же накладывает отпечаток на общее время выполнения всех плат, потому как служебный код тоже занимает процессорное время и выполнится четыре раза за время выполнения всей программы. В том числе в этом служебном коде и "обслуживатель" диспетчера задач.

Ну и в чём смысл? - спросите вы. Да нет в этом особого смысла. И если у вас только свободные задачи, то просто отключите диспетчер задач. Он вам не нужен, а лишь загружает память контроллера и увеличивает время компиляции.


Часть вторая "В чём тайный замысел Демона"

Всё демоническое УМНО и в то же время просто! Главное разобраться как это работает. Так сказать впитать демонические знания. Главное при этом, не продать Демону душу. :)
Бесполезность диспетчера задач заканчивается и начинается магия в том случае, когда наряду со свободными задачами вы начинаете использовать и другие варианты - Оперативная, Быстрая, Фоновая, Медленная задачи.
В отличии от свободных задач, эти выполняются не в порядке очереди, а по таймеру. Время таймаута этих задач вы можете посмотреть в параметрах.
.
Разные Задачи.jpg
.
В процессе выполнения программы, тайминговые задачи не ждут своей очереди, а вклиниваются между свободными, когда пришло время. В своей иерархии они конечно тоже имеют очередность, но это уже не рядовые, а офицерский состав. Соответственно и прав у них больше.

Но самым главным генералом, который плевать хотел на все очередности - это плата на которой поставлено "Без диспетчера задач". Такая плата встанет во главу и будет выполняться каждый цикл наряду со служебным кодом. Однако чем выше звание тем больше и ответственность. Сделав много таких плат, вы убьёте весь замысел.
.
Диаграмма 4.jpg
.
С названиями задач конечно беда. "Свободная задача"- ну какая же она свободная, когда ущемлена больше всего. Её свобода лишь в том, чтобы стоять и ждать своей очереди в борьбе за право на цикл. Но на то он и Демон, чтобы ввести во искушение, а потом нагнать мути и заморочить. Я догадываюсь откуда ноги растут. Неудачная калька с английского - free task.
Будь моя воля, назвал бы более привычными для славян терминами, типа Рядовая задача, Задача I ранга, Задача II ранга, Внеочередная задача и т.п.
Но Демону видней, да и колода у него в руках.

Послесловие

Вообще-то это даже хорошо что есть белое и чёрное, Ангел и Демон. Благодаря этому в нашем Мире есть Свет и Тень, Инь и Ян.
Не будь чего то одного, невозможно было бы оценить по достоинству имеемое.

На этом в общем то алес! :)
Абсолютно весь демонический замысел раскрыл для вас за 5 минут.
Буду рад, если мой творческий порыв кому-то поможет.
Ваш Dryundel
2025г.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
slsl
Лейтенант
Сообщения: 318
Зарегистрирован: 08 дек 2021, 22:41
Имя: Вячеслав
Благодарил (а): 16 раз
Поблагодарили: 51 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение slsl »

К слову сказать, в 9-й версии диспетчер стал удобоварим, и даже не вникая в тонкости и мануалы, даёт реальный прирост в производительности, даже в сложных задачах как-то - опрос хардового уарта + MQTT + WEB + дисплей (TFT) + опрос аналог входов + модбас RTU +..., довольно существенно.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2500
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 12 раз
Поблагодарили: 144 раза

Re: Диспетчер задач. Инь и Ян.

Сообщение Dryundel »

slsl писал(а): 17 июл 2025, 17:30 К слову сказать, в 9-й версии диспетчер стал удобоварим, и даже не вникая в тонкости и мануалы, даёт реальный прирост в производительности, даже в сложных задачах как-то - опрос хардового уарта + MQTT + WEB + дисплей (TFT) + опрос аналог входов + модбас RTU +..., довольно существенно.
Расскажите как Вы определили прирост производительности.
Ander
Лейтенант
Сообщения: 527
Зарегистрирован: 31 окт 2023, 12:50
Имя: Андрей
Благодарил (а): 26 раз
Поблагодарили: 100 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение Ander »

Dryundel - посмотрите в каких вызываются Пулы, они тоже в задачах, а не в каждом цикле.
slsl
Лейтенант
Сообщения: 318
Зарегистрирован: 08 дек 2021, 22:41
Имя: Вячеслав
Благодарил (а): 16 раз
Поблагодарили: 51 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение slsl »

Dryundel писал(а): 17 июл 2025, 17:45 Расскажите как Вы определили прирост производительности.
Самое простое - по количеству циклов.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2500
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 12 раз
Поблагодарили: 144 раза

Re: Диспетчер задач. Инь и Ян.

Сообщение Dryundel »

slsl писал(а): 17 июл 2025, 19:12 Самое простое - по количеству циклов.
:smile171:

Не убедительно. Перечитайте внимательно Первую часть и станет понятно, что при диспетчере задач, программа выполняется не за один цикл, а за несколько и количество циклов в единицу времени, в этом случае далеко не показатель производительности.
slsl
Лейтенант
Сообщения: 318
Зарегистрирован: 08 дек 2021, 22:41
Имя: Вячеслав
Благодарил (а): 16 раз
Поблагодарили: 51 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение slsl »

Dryundel писал(а): 17 июл 2025, 19:19 при диспетчере задач, программа выполняется не за один цикл, а за несколько и количество циклов в единицу времени, в этом случае далеко не показатель производительности.
Сильно убеждать и не собирался. Но провёл несколько экспериментов: отключал те или иные модули (платы) с MQTT, опросы портов и.т.д., при этом было видно изменение количество циклов. При отключенном диспетчере дельта изменений была не большая по сравнению с включенном диспетчером. Т.е наблюдал не мгновенные значения, а в динамике по времени.

Одна из тяжёлых задач, жрущих циклы - MQTT.
Technician
Рядовой
Сообщения: 4
Зарегистрирован: 15 апр 2025, 16:29
Имя: Виктор
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Диспетчер задач. Инь и Ян.

Сообщение Technician »

Немного сложно Андрей объяснишь построение алгоритма - это основа вычислительной техники и программирования ,не все поймут.Все инструменты и раньше были : платы по условию и командоаппарат ,только путь указал тот "Кого нельзя называть" :smile38: .
Ответить

Вернуться в «Обучающие примеры работы в FLProg»

Кто сейчас на конференции

Сейчас этот форум просматривают: Technician и 0 гостей