Fork-join nel modello attore

3

Sto leggendo un documento sul modello dell'attore e descrivono come un il comportamento fork-join può essere implementato usando:

Let us consider how a system of actors, when requested to calculate some value, can split up the load among themselves and combine the results to form the final answer. Actor F receives a request message to calculate the value f(x) = h(g1(x),g2(x)) and send the reply to the actor R. Actor F then creates an actor H and sends a message to G1 requesting it to calculate g1(x) and send its reply to H. Simultaneously, F sends a message to G2 requesting it to compute g2(x) and send its reply to H. Assuming that G1 and G2 are both total, H will receive messages from both G1 and G2 containing the values g1(x) and g2 (x), respectively. Now because of the arbiter on H, these two messages are guaranteed to arrive at H in some order, but the order cannot be predicted. Therefore, the reply messages to H will also contain an indicator 1 or 2 to tell H that they were sent by G1, or G2, respectively. The script for H specifies that H is to wait until it has received replies from both G1 and G2, and when it has, it is to compute h(g1(x), g2(x)) and send that value to R;

Ora, quello di cui non sono sicuro è il passaggio:

The script for H specifies that H is to wait until it has received replies from both G1 and G2, and when it has, it is to compute h(g1(x), g2(x)) and send that value to R;

Questo implica che l'attore H debba essere in una sorta di "attesa attenta" per ricevere questi messaggi? In tal caso, l'attore non dovrebbe essere attivo e quindi non in grado di ricevere messaggi?

Sto leggendo troppo e hanno semplicemente significato che l'attore è attivato una volta che arrivano entrambi i messaggi?

    
posta Shoe 05.06.2016 - 01:57
fonte

1 risposta

2

Immagino che H non sia in attesa. Ricorda che gli agenti operano sui messaggi che ricevono. Quindi, riceve il primo messaggio nella sua casella di posta, ma non può farci nulla fino a quando non arriva il secondo risultato. Quindi (eventualmente salva il messaggio per dopo e) torna a dormire fino a quando un altro messaggio lo riattiva. Una volta ricevuto il secondo messaggio, elabora h(message1, message2) e invia il messaggio risultato a R.

Il fatto che messaggio1 e messaggio2 siano rispettivamente i risultati di g1 (x) e g2 (x) non sono rilevanti per l'agente H. E di conseguenza spesso deve esserci un identificatore (handle) per fornire un contesto per il quale due messaggi appartengono insieme.

    
risposta data 08.06.2016 - 00:49
fonte

Leggi altre domande sui tag