Послідовність, яку можна передбачити лише теорією
Спостерігайте за чергою деякий час і вона здається непередбачуваною — іноді порожнім, іноді раптово довгим, навіть коли середній рівень прибуття людей та середній рівень обслуговування залишаються постійними. Теорія черг пояснює цей видимий хаос двома припущеннями, які добре моделюють величезну кількість реальних систем: прибуття відбуваються за розподілом Пуассона (незалежні, без пам'яті, з деяким середнім рівнем лямбда) та час обслуговування розподілені експоненціально (середній рівень му на відкритому сервері). Система, побудована на цих двох припущеннях із c паралельними серверами, називається чергою M/M/c у нотації Кендалда — дві M означають «марківський», скорочено без пам'яті.
Безпам’ятність є дивовижним і несучим вагу припущенням: експоненційний час обслуговування не має жодного поняття про ‘майже завершено’ — ймовірність того, що наступні 30 секунд завершить роботу, однакова, чи почала робота 10 секунд тому, чи 10 хвилин тому. Ця єдина властивість робить всю систему марковською ланцюгом із чистою закритою формою рішення, а не системою, де історія минулого повинна відстежуватися.
Utilisation et le mur à rho = 1
Définir l'intensité du trafic rho = lambda / (c · mu) -- la fraction de la capacité totale de service réellement utilisée. Tant que rho reste en dessous de 1, la file d'attente atteint un équilibre stable où la longueur moyenne et l'attente fluctuent autour d'une valeur finie. À mesure que rho s'approche de 1 à partir du bas, la longueur de la file d'attente et le temps d'attente explosent, pas linéairement mais approximativement comme 1 / (1 - rho) : une file d'attente à 80 % d'utilisation n'est nulle part près deux fois aussi mauvaise qu'une à 40 %, c'est dramatiquement pire, et une file d'attente à 95 % est encore pire par un énorme facteur. Ce cliff non linéaire est pourquoi les centres d'appels, le triage des hôpitaux et les routeurs de réseau sont tous délibérément exécutés en dessous de la capacité maximale -- 100 % d'utilisation semble efficace sur papier et constitue une catastrophe de file d'attente en pratique.
rho = lambda / (c · mu) traffic intensity (utilisation), must stay < 1 Lq ~ rho / (1 - rho) for a single-server queue -- diverges as rho -> 1
Erlang-C: точна формула для штатування колл-центрів
Для c серверів точна ймовірність того, що прибулого клієнта знайде зайнятим кожен з серверів і доведеться чекати — на відміну від вищезгаданого односерверного наближення — задається формулою Erlang-C, опублікованою Агнером Крарупом Ерлангом у 1917 році для розміщення датських телефонних обмінів і досі є основою програмного забезпечення для штатування колл-центрів. З цієї ймовірності очікування стандартні залежності (разом Little's Law, L = lambda * W) перетворюються безпосередньо на середню кількість чекаючих Lq та середній час очікування Wq.
Little's Law: the one formula that needs no assumptions at all
Independent of Poisson arrivals, exponential service, or any distribution at all, Little’s Law states that the long-run average number of items in any stable system L equals the average arrival rate lambda times the average time an item spends in the system W: L = lambda * W. It holds for a supermarket checkout, a hospital ward, or packets in a router buffer, and its power is that it needs no model of the internal mechanics -- just count what goes in and how long things stay.
Why more, smaller queues are worse than one shared queue
A classic and counter-intuitive result: for the same total service capacity, one shared queue feeding c servers (like most modern call centres and airport security lines) always gives a shorter average wait than c separate single-server queues (like old-style supermarket checkout lines), because a single queue never lets one server sit idle while a customer waits behind a slow transaction at another. This is exactly why banks, post offices and airports switched from multiple parallel lines to a single serpentine line feeding whichever teller frees up next.
Frequently asked questions
Що означає M/M/c насправді?
Це позначення Кендалла для черги з Пуассонівським (Марковським) приходом, експоненційним (Марковським) часом обслуговування та c паралельними серверами. Обидва M посилаються на властивість безпам'ятності експоненційного розподілу, що робить поведінку черги розв’язуваною у закритому вигляді.
Чому черга при насиченості 90% відчувається набагато гірше, ніж при 70%?
Бо середньої довжини черги та часу очікування зростають приблизно як rho / (1 - rho), а не лінійно з насиченістю rho. Перехід від 70% до 90% насиченості значно множить стиснення знаменника, тому час очікування росте набагато швидше, ніж на 20-відсоткове різниця в насиченості свідчить.
Краще мати одну спільну чергу або кілька окремих черг для тієї ж кількості серверів?
Одна спільна черга, яка живить усі сервери, доведено краща в середньому: вона усуває ситуацію, коли один сервер простаює, поки клієнт чекає в іншій черзі позаду повільної транзакції. Саме тому банки та аеропорти перейшли до однорідних черг-вигинів замість однієї черги на касу.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Queueing Theory і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Queueing Theory