1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-22 18:44:17 +00:00
appunti-steffo/9 - Algoritmi distribuiti/3 - Computazione distribuita/2 - Broadcast/flooding v2.md

1.8 KiB

algoritmo di broadcast problem che risolve l'incorrettezza del flooding v1.

[!Summary] Il leader invia il suo messaggio iniziale a tutti i vicini, e, se è la prima volta che lo ricevono, loro lo inoltrano a loro volta ai loro vicini.

Comportamento

LEADER

All'impulso spontaneo, invia il suo messaggio:

spontaneously! {
	send!(*, Message {...});
	state!(DONE);
}

Se lo riceve indietro, non fa niente:

on_receive! {
	_ => {},
}

SLEEPING

Se riceve il messaggio, lo inoltra a tutti i suoi vicini, poi passa allo stato DONE:

on_receive! {
	_ => {
		send!(*, msg);
		state!(DONE);
	},
}

DONE

Non fa niente.

algoritmo corretto

Per via dell'ipotesi di grafo connesso, tutte le entità riceveranno eventualmente il messaggio inviato.

Con la ricezione del messaggio, eventualmente tutte le entità diventeranno DONE, raggiungendo terminazione locale.

costo computazionale distribuito

Comunicazione

Attraverso ogni canale di comunicazione passeranno al massimo due messaggio:

  • 0, se l'algoritmo termina prima che il canale di comunicazione sia esplorato
  • 1, se l'entità di destinazione non è ancora stata scoperta
  • 2, se entrambe le entità connesse sono scoperte contemporaneamente

Dunque, i messaggio trasferiti saranno: 2 \cdot Channels

Che, in notazione asintotica, è: \Large O(Channels)

Spazio

Un multiplo del costo di comunicazione, sempre notazione asintotica a: \Large O(Channels)

Tempo

Coincide con il lower bound del broadcast problem.