Omawiając temat kolejkowania warto wspomnieć o twórcy teorii kolejkowania (ang. Queueing theory). Agner Krarup Erlang, bo o nim mowa, opracował model oraz opisał teorię kolejkowania. Wskazał różne sposoby obsługi kolejki oraz konsekwencje zastosowania określonych rozwiązań. Jest także inicjatorem języka Erlang, za pomocą, którego można w prosty sposób zobrazować dodawanie i pobieranie spraw z kolejki.
Wrócmy do przykładu z poprzedniego wpisu i skupmy się na elemencie przejścia od zgłoszenia (niezależnie od kanału) do określonej pozycji na liście spraw. Na poniższym diagramie został zaprezentowany fragment takiego procesu. Zgłoszenie jest zapisywane jako całość a na kolejce umieszczone są wybrane dane niezbędne do zarządzania nią.
Czynność Do sprawę do kolejki, przy wykorzystaniu języka Erlang, opiera się na logice (na podstawie strony http://erlang.org/doc/man/queue.html):
in(Item, Q1 :: queue(Item)) -> Q2 :: queue(Item),
gdy chcemy dodać sprawę na końcu listy. Natomiast:
in_r(Item, Q1 :: queue(Item)) -> Q2 :: queue(Item),
gdy dodajemy sprawę na początku listy. Potem obsługując kolejkę pobieramy zadania z początku lub końca – odpowiednio:
out(Q1 :: queue(Item)) -> {{value, Item}, Q2 :: queue(Item)} | {empty, Q1 :: queue(Item)} lub out_r(Q1 :: queue(Item)) ->{{value, Item}, Q2 :: queue(Item)} | {empty, Q1 :: queue(Item)}
Obsługując kolejkę metodą FIFO lub LIFO musimy wykorzystać pary metod:
dla FIFO – funkcja in do umieszczania oraz funkcja out do pobierania,
dla LIFO – funkcja in oraz funkcja out_r,
Metody LIFO i FIFO opisywałem w poprzednim wpisie.