Теория очередей (queueing theory) описывает поведение систем в которые поступают запросы. Если у нас есть какая-то система, в ней один или несколько агентов обрабатывают запросы с разной скоростью, а сами запросы поступают неравномерно — эту систему можно математически описать и вывести закономерноcти.
Письма в техническую поддержку, очереди в магазинах, запросы к серверам — ко всем этим штукам можно применить эту теорию.
Обычно тут сразу упоминают закон Литтла (“среднее число запросов в системе = среднее время выполнения запроса в системе × средняя интенсивность поступления новых запросов”), но я не буду рассказывать про него. Это интуитивно понятная формула (“чем больше в очереди людей — тем медленней принимает врач”, “если ограничить количество задач в системе — они будут решаться быстрее”), но её расчёты сложно применимы к обычным реальным задачам.
Важная мысль же другая: если система работает на пределе выносливости, то добавление нового “агента” в систему будет иметь очень сильное влияние на скорость работы системы, гораздо сильнее чем кажется интуитивно.
Допустим у нас есть отделение почты. В час на почту приходит в среднем 5 человек. На почте сидит один человек, она или он может обслужить 6 человек в час.
В среднем каждый человек будет ждать в очереди 50 минут. А средняя длина очереди — 4 человека.
Но если мы добавим второго человека (они оба обслуживают очередь c одинаковой скоростью), то это имеет ошеломительный эффект. Среднее время ожидания в очереди — 2 минуты, а средняя длина очереди — 0!
Понятно, что это средние значения (да и в самих расчётах были сделаны определенные упрощения) — иногда будет больше, иногда меньше. Но это неожиданный результат.
Понятно, почему так происходит. Когда система работает на пределе возможностей, то неравномерность поступления новых заявок приводит к всплескам. Если в среднем приходит 5 человек в час, это не значит, что каждый приходит раз в 12 минут. Это случайный процесс. И добавление нового “агента” позволяет сгладить эти всплески. Большую часть времени этот агент может не делать ничего, но его наличие позволяет иметь стабильную скорость работы системы даже при наплыве заявок. И чем сильнее система работает на пределе возможностей, тем сильнее эффект от добавления нового агента.
Для желающих занырнуть в детали — эти штуки быстро моделируются в Mathematica. Не обязательно даже знать формулы, чтобы попробовать различные модели. Вот например расчёт примера с почтой.