Domanda

Ho visto molti esempi di chat in Erlang, ma per quanto riguarda gli elenchi, come una coda di lavoro? Se voglio creare un sistema di code di lavoro, come un sistema di gestione dei progetti, è possibile riordinare i messaggi in una cassetta postale di processo o devo utilizzare le priorità dei messaggi? Esistono esempi di sistemi di flusso di lavoro integrati in Erlang?

È stato utile?

Soluzione

Non è possibile riordinare i messaggi nelle code dei messaggi di processo in Erlang.

Puoi, tuttavia, ricevere in modo selettivo in cui puoi ricevere il messaggio che ritieni più importante prima. Non è del tutto uguale ma funziona per la maggior parte degli scopi.

Ecco un esempio:

receive
    {important, Msg} ->
        handle(Msg)
after 0 ->
    ok
end,
receive
    OtherMsg ->
        handle(Msg)
end

Differisce da:

receive
    {important, Msg} ->
        handle(Msg);
    OtherMsg ->
        handle(Msg)
end

In quanto eseguirà sempre la scansione dell'intera coda dei messaggi alla ricerca di {important, Msg} prima di continuare a gestire il resto dei messaggi. Significa che questi tipi di messaggi saranno sempre gestiti prima di tutti gli altri, se esistono. Questo ovviamente ha un certo costo in termini di prestazioni (impiega più tempo a scansionare l'intera coda due volte).

Altri suggerimenti

Le cassette postali di processo funzionano abbastanza bene così come lo sono per le code dei lavori.

Basta che i tuoi messaggi includano informazioni sufficienti in modo che i modelli di ricezione selettiva siano facili da scrivere e non sentirai la necessità di riordinare il contenuto della cassetta postale.

Se è necessario riordinare i messaggi, è possibile seguire il modello gatekeeper: reificare la cassetta postale come processo separato. Quando il processo originale è pronto per un altro messaggio, il gatekeeper può calcolare quale messaggio inoltrare, con qualsiasi regola tu scelga.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top