Паралельне завантаження, фонові завдання
У рамках виконання проекту зіткнувся із цікавим завданням прискорення завантаження даних з інших інформаційних баз. Завдання завантаження даних передбачало виконання до зовнішньої базі незв'язаних між собою запитів, результати яких містяться в одну таблицю значень. Коли на оптимізацію запиту рука вже не піднімалася, почав прискорювати завантаження за допомогою розпаралелювання процесів. Зазначу, що елементи коду в даному посту наведені для клієнт-серверного варіанта та укрупнено для загального розуміння підходу.
Перед запуском фонової задачі через фонові завдання. Виконати () ми формуємо масив параметрів. Значення з масиву параметрів переходять до методу фонового завдання як параметри. У Масив Запущених Задань зберігаються всі фонові завдання, які ми запустили. Тепер треба зачекати на їхні очікування.
Гарна інформація, дякую 🙂 Як добре, що в 8.2 є таке поняття як ТимчасовеСховище. На 8.1 довелося б якось мудрувати. Сам поки що не знаю, як визначити оптимальну кількість потоків математично, тому предлагаю найдоступніший і найпростіший спосіб — емпіричний метод. Або «метод тика» — вручну погратися, позапускати різну кількість потоків і паралельно вимірювати швидкість
Я під час завантаження використовую зовнішню обробку, яку піднімаю на стороні зовнішньої бази. Дуже ще в 8.2 сподобалося, що для запуску зовнішньої обробки можна запускати V82.ComConnector, а не довго думаючий .Application.
Сьогодні вдався до цього підходу. Вивантаження даних для особистого кабінету відбувається у кілька потоків. Приріст за швидкістю отримано.