Перейти к основному контенту

Очередь расчёта: почему приходится ждать и откуда берётся срок

Почему расчёт не мгновенный, откуда берётся названный срок и что делать, если счёт оборвался по времени. Общий материал двух сервисов.

Нажали «рассчитать» — и вместо результата видите «В очереди». Ниже о том, что
происходит в эти секунды и почему названный срок именно такой.

Почему расчёт не мгновенный

Раскрой — это перебор. Программа не подставляет детали в формулу, а
примеряет порядки укладки, сравнивает их между собой и выбирает лучший.
Количество вариантов растёт быстрее числа деталей, поэтому задание на сотню
позиций считается не в сто раз дольше задания на одну.

Порядок величин в раскрое профиля: спецификация на 500 позиций считается около
семи секунд, на 2000 — около тридцати.

В раскрое листа величины иные, и это важно не перепутать. Там перебираются
ещё и повороты деталей, а сама деталь задана не длиной, а контуром из десятков
и сотен точек. Счёт идёт на десятки контуров, а не на тысячи позиций:
задание из 27 контуров считается около пятидесяти секунд, из 46 контуров в 107
экземплярах — около пяти с половиной минут. Если перенести на раскрой листа
привычку, взятую из раскроя профиля, покажется, что сервис завис.

Это счёт, а не ожидание сети. Обновление страницы его не ускорит.

Почему очередь, а не «всем сразу»

Сервер мог бы взяться за все задания одновременно. Так было бы хуже для
всех
.

Работы от этого не убавится: те же расчёты поделят те же вычислительные ядра.
Но при очереди первый получает ответ через несколько секунд, а при
одновременности все ждут максимума. Двадцать заданий по пятнадцать секунд
на двух ядрах — либо кто-то готов через пятнадцать секунд, либо все через две с
половиной минуты.

Поэтому задания выполняются по порядку поступления, а сколько их идёт разом —
задаётся числом ядер, отданных расчётам.

Откуда берётся названный срок

Три величины.

Объём работы, стоящей впереди. Складываются не задания, а их объём: в
раскрое профиля — число позиций спецификации, в раскрое листа — число узлов
контуров после спрямления дуг.

Это существенно. «Третий в очереди» — сведение бесполезное, пока не известно,
что это за трое. Одно крупное задание впереди весит больше десятка мелких, и
оценка по числу заданий врала бы систематически.

Стоимость единицы работы на этом сервере. Не взятая из справочника, а
измеренная здесь: по последним нескольким сотням досчитанных заданий
считается, сколько в действительности уходит на позицию или на узел.
Оборванные по времени в счёт не идут: они говорят лишь о том, что упёрлись в
предел, а не сколько считались бы на деле. У другого
сервера другая частота, другая загрузка — и величина другая.

Пока измерений мало, применяется приближение, и оно намеренно осторожное.

Сколько расчётов идёт одновременно.

Отсюда: ожидание ≈ объём работы впереди ÷ число мест + собственное задание.

Почему «около сорока секунд», а не «43 секунды»

Оценка округляется вверх и до крупного шага. Это сделано намеренно.

Обещание с точностью до секунды создаёт ожидание точности, которой расчёт не
даёт: соседнее задание может оказаться тяжелее ожидаемого. А заниженное
обещание вредит вдвойне — человек, которому обещали двадцать секунд, на
сороковой решает, что расчёт завис, ставит задание заново и удлиняет ту самую
очередь
, которую ждал.

Ступени: до десяти секунд — «меньше 10 секунд»; до минуты — десятками секунд;
до пяти минут — минутами; далее — пятёрками минут; свыше часа — «более часа».

Что делать, пока идёт расчёт

Не обновлять страницу и не нажимать «рассчитать» второй раз. Задание уже
принято; повторное нажатие поставит в очередь ещё одно, и ждать придётся
дольше.

Вкладку можно оставить открытой. Результат появится сам.

Можно уйти со страницы — задание не пропадёт.

Если расчёт оборвался по времени

У расчёта есть предел. Он не наказание, а защита: задание, ушедшее в перебор
без конца, заняло бы ядро и остановило очередь для всех остальных.

Оборванный расчёт не пропадает: выдаётся лучшее найденное к этому моменту
размещение, и об обрыве говорится прямо. Просто раскладка вышла хуже, чем могла
бы.

Что обычно помогает:

  • разделить задание. Две спецификации по 500 позиций считаются быстрее
    одной на 1000 — перебор растёт быстрее их числа. В раскрое листа деление по
    толщинам программа делает сама: детали разной толщины не лежат на одном
    листе, и на каждую толщину получается своя карта;

  • снять часть послаблений. Каждое послабление расширяет перебор. В раскрое
    профиля это общие резы, зеркалирование и стыковка; в раскрое листа — повороты
    деталей, число углов поворота, взятых из их геометрии, и размещение мелких
    деталей в отверстиях крупных. Отключение самого дорогого из них часто
    укладывает расчёт в предел с потерей долей процента по расходу металла;

  • проверить исходные данные. Деталь, не помещающаяся в заготовку, нулевое
    количество, ошибка в размерах — такое иногда уводит перебор в тупик. В
    раскрое профиля к этому добавляется сечение с опечаткой, в раскрое листа —
    незамкнутый или самопересекающийся контур.

Если ждать не хочется

Задание можно снять — тогда ядро освободится сразу, и очередь для остальных
станет короче. Снятие ничего не стоит и ничего не расходует.

Снятие доступно там, где оно предусмотрено интерфейсом сервиса; в раскрое
профиля расчёты коротки, и такой нужды обычно не возникает.

Чего очередь не означает

Не сбой. Задание принято и будет выполнено.

Не перегрузку сервера. Даже один расчёт впереди вашего даёт «в очереди» —
это обычная работа, а не признак нехватки мощности.

Не потерю данных. Исходные данные уже на сервере; закрытая вкладка расчёту
не мешает.


Документ размещён в справочных целях. Действующую редакцию сверяйте по официальному источнику.