Многопоточность в 1С
Данные > Статьи и инструкции > Практика
Платформа 1С 8 может работать в файловом варианте и в клиент-серверном. Так вот, работа 1С в файловом варианте - это всегда работа в одном потоке. Сколько бы операций не было запущено, они все будут выстроены в одну очередь и исполняться последовательно. А что же насчет клиент-серверного варианта работы?
📌 Допустим у меня есть сервер с одним процессором у которого 6 ядер. В кластере работает одна база, и все настройки стоят по умолчанию, я имею ввиду параметры рабочих процессов (кол-во ИБ на процесс: 8, кол-во соединений на процесс: 256). Как вы думаете, если я запущу 6 фоновых заданий в которых будет выполняться цикл эмулирующий загрузку процессора, будут ли все 6 ядер загружены или будет загружено только одно ядро? Примем допущение, что на этом сервере больше никто и ничего не работает.
💣 Правильно, будут загружены все ядра процессора. Но такая ситуация будет происходить, если все эти процессоры находятся в одном NUMA узле. NUMA - это архитектура , при которой некоторое количество логических процессоров объединены в группу, и общаются между собой через общую память. Такое взаимодействие между ядрами внутри numa-узла самое быстрое. Отсюда и название Non-Uniform Memory Access (неравномерный доступ к памяти).
Таким образом, если один rphost стартовал в одном numa-узле, то использовать ли ядра другого numa-узла будет решать сама ОС. ОС при обработке поступающего запроса, может отказаться выбирать свободные процессоры, из-за того что используют другой сегмент выделенной памяти. Почем так? Потому, что полноценная поддержка NUMA в 1с пока не реализована.
📖 Выдержка из технологических вопросов крупных внедрений:
- На многопроцессорных системах на одном сервере должно работать больше одного процесса rphost.
- Следует иметь в виду, что поддержка NUMA в кластере серверов "1С:Предприятия" полноценно пока не реализована.
- Сервер 1С не управляет распределением ресурсов по NUMA узлам, полностью полагаясь в этом на операционную систему, что не всегда даёт оптимальный результат.
И тут можно наблюдать картину, когда часть ядер на сервере 1С загружена под 100%, а часть простаивает. В этой ситуации как раз помогут параметры рабочих процессов: количество ИБ на процесс, и количество соединений на процесс, которые позволяют регулировать количество rphost-оф. При этом нельзя забывать про ограничение платформы уровня ПРОФ, все эти возможности по настройке, такие как: количество ИБ на процесс, кол-во соединений на процесс, а также использование более 12 ядер на сервере 1С доступны только в платформе уровня КОРП.

Механизмы многопоточности в 1С:
- Фоновые задания позволяют выполнять код в отдельном процессе на сервере 1С:Предприятие. Они используются для выполнения длительных операций, чтобы не блокировать основное приложение.
- Асинхронные вызовы позволяют выполнять методы в фоновом режиме без создания отдельного фонового задания.
- Параллельное выполнение запросов. Можно выполнять несколько запросов к базе данных параллельно, используя механизм асинхронных запросов.
- А также работа с потоками через внешние компоненты.
Важные моменты:
- Фоновые задания выполняются на сервере, поэтому они не блокируют интерфейс пользователя.
- Асинхронные вызовы и фоновые задания не гарантируют истинную многопоточность, так как они выполняются в рамках одного процесса сервера 1С.
- Для реализации сложной многопоточности может потребоваться использование внешних компонент или интеграция с другими системами.
Если вам нужно реализовать сложную многопоточную логику, рекомендуется тщательно проектировать архитектуру приложения и учитывать ограничения платформы 1С.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник