Priorytet otrzymują w Erlang można łatwo wdrożyć w następujący sposób:Erlang: priorytet otrzymują
prio() ->
receive
{priority, X} -> X
after 0 ->
receive
X -> X
end
end.
Czytam gazetę o nazwie Priority Messaging made Easy, w którym opisują następujący problem:
Głównym problemem [kod] przykład [powyżej] jest taki, że nie bierzemy pod uwagę, że gdy wznowienie oceny następuje z wewnętrznego odbioru blokowania, możemy mieć więcej niż jedną wiadomość w skrzynce pocztowej. W najgorszym przypadku wszystkie, oprócz pierwszej potencjalnie dużej liczby elementów, mogą być komunikatami priorytetowymi. W tym scenariuszu osiągnęlibyśmy wręcz przeciwieństwo tego, co zamierzaliśmy zrobić.
Nie do końca rozumiem.
Pytanie (1): Zakładam, że wewnętrzna blokowanie odbierać będzie „nazywa się” (tj wznowione) jak tylko jeden wiadomość dotarła w kolejce komunikatów, prawda? Czy jest realistycznym założenie, że w krótkim czasie, jaki zajmuje wznowienie z wewnętrznego odbierania blokującego, w kolejce czekałaby już cała masa wiadomości?
Pytanie (2): Również najgorszy scenariusz opisany jest jako kolejka z jednym zwykłym komunikatem i wieloma komunikatami o priorytecie. Ponieważ wszystkie klauzule odbierania są najpierw sprawdzane przed pierwszą wiadomością w kolejce, a następnie przed drugą wiadomością w kolejce ... (źródło: to book, strona 69-70) nie powinno to być: dużo normalnego komunikaty z na końcu kolejki komunikat priorytetowy?
Nie zapomnij o kliknięciu klapek z rubinem. –