Добрый день! Какой вариант предпочтительнее с точки зрения отказоустойчивости: 1) несколько отдельных программ обмениваются между собой через аргументы каналов; 2) одна-единственная программа содержит в себе все алгоритмы; отдельные части программы взаимодействуют через глобальные переменные. 1 вариант удобнее и нагляднее, но 2 вариант, вроде бы менее ресурсозатратный. Если реализовать 2 вариант, то какие есть ограничения по объёму st-программы?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Проблема не только в ресурсоемкости, но и в синхронизации процессов обработки по варианту 1. По этому варианту нельзя гарантировать, что при всех условиях обрабатываемые программами данные относятся к одному временному срезу. Могут потребоваться дополнительные меры для исключения возможных ошибок за счет рассинхронизации используемых данных. При условии, что объем программы по варианту 2 не является чрезмерным, этот вариант более предпочтителен.
Методического ограничения на объем ST-программы нет. А вот ограничения на количество аргументов в программе существуют (по документации суммарно на аргументы программы выделяется 4 КБ памяти) - не более 4000 аргументов, если все аргументы числовые. Если используются и строковые аргументы, то на каждый из них выделяется 256 байт.
Posted by Booster (Участник № / Member № 6801) on :
Спасибо! Вопрос вдогонку - нет ли ограничений на количество глобальных переменных?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Методических ограничений нет. Но в конечном счете суммарное количество переменных во всех программах является потребляемым ресурсом памяти. Поэтому реальные ресурсы ОС, выделяемые процессу, могут ограничить возможности узла. Это в равной мере относится ко всем компонентам, требующим системных ресурсов. Кроме того, процедуры синхронизации при использовании резервирования могут потребовать дополнительных объемом буферов для передачи по сети, что также ограничивается в ОС.