Domanda

Posso impostare la dimensione massima per la cassetta postale di un attore in Scala?

Accetta il problema produttore-consumatore. Con i thread posso bloccare i produttori quando il buffer si riempie. Ho visto un paio di esempi produttore-consumatore scritti in Scala e tutti usano attori con cassette postali usate come "buffer". Posso impostare le dimensioni della cassetta postale in modo che i produttori aspettino che un consumatore sia pronto? Qualche altra soluzione elegante per evitare la crescita incontrollabile delle cassette postali?

È stato utile?

Soluzione

Puoi creare un attore che funge da buffer tra produttore e consumatore. Il buffer estrae la sua cassetta postale dai dati del suo ciclo. Restituisce un "sovraccarico" messaggio al produttore quando il numero di prodotti tamponati è troppo elevato; e invia un messaggio "cancella" messaggio una volta che tutto è tornato in ordine. In caso di troppi messaggi, rilascia semplicemente quelli in arrivo (o quelli più vecchi).

Il consumatore richiede attivamente prodotti dal buffer, che a sua volta restituisce un prodotto. Se il buffer è vuoto, il consumatore continua ad attendere l'input.

Il produttore invia prodotti all'attore buffer. Se riceve un "sovraccarico" messaggio può interrompere la produzione o continuare a produrre, sapendo che i prodotti potrebbero essere eliminati.

Naturalmente questa logica potrebbe essere direttamente implementata nel produttore o nel consumatore stesso, ma un buffer separato ti consentirà di introdurre più produttori e / o consumatori più facilmente.

Altri suggerimenti

Il metodo Actor.mailboxSize restituisce il numero di messaggi in sospeso nella cassetta postale dell'attore.

Questo può essere usato per limitare il produttore in vari modi.

Ad esempio, una possibilità potrebbe essere,

Il produttore verifica se il mailboxSize del consumatore è maggiore di qualche soglia. In tal caso, invia un SpecialMessage al consumatore e si blocca su un semaforo. Quando il consumatore riceve questo SpecialMessage rilascia il semaforo. Il produttore ora può continuare allegramente ai suoi affari.

Questo evita il polling e tutti i messaggi rilasciati.

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