Priorità ricevere in Erlang può essere facilmente implementata come segue:Erlang: priorità ricevere
prio() ->
receive
{priority, X} -> X
after 0 ->
receive
X -> X
end
end.
Sto leggendo un articolo intitolato Priority Messaging made Easy in cui essi descrivono il seguente problema:
Il problema principale con l'esempio [codice] [sopra], è che non prendiamo in considerazione il fatto che quando la valutazione viene ripresa dalla ricezione del blocco interno potremmo avere più di un messaggio nella casella di posta. Nel peggiore dei casi, tutti tranne il primo, potenzialmente un numero enorme di elementi potrebbero essere messaggi prioritari. In questo scenario avremmo effettivamente realizzato esattamente l'opposto di ciò che intendevamo fare.
Non lo capisco completamente.
questione (1): Suppongo che il blocco interno riceve verra 'chiamato' (vale a dire riprende) non appena uno messaggio è arrivato nella coda dei messaggi, giusto? È realistico supporre che nel breve lasso di tempo necessario per riprendere dalla ricezione interna di blocco, ci sarebbe già un sacco di messaggi in attesa in coda?
Domanda (2): Inoltre, lo scenario peggiore è descritto come una coda con un messaggio normale e molti messaggi prioritari. Poiché tutte le clausole di ricezione vengono prima verificate rispetto al primo messaggio in coda, e quindi contro il secondo messaggio in coda, ... (fonte: questo book, pagina 69-70) non dovrebbe essere questo: un sacco di normale messaggi con alla fine della coda un messaggio prioritario?
Non dimenticare di fare clic sulle tue pantofole Ruby. –