Многопоточность в 1С - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

Многопоточность в 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
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 29.01.2025
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому