Come decidi di sincronizzare o sincronizzare eventi Synta o Async? (in Pattern osservatore)

4

Considera i seguenti elementi in un'architettura guidata dagli eventi:

  1. Oggetto osservabile
  2. Dispatcher eventi
  3. Observer (Listener)

Ora abbiamo due messaggi:

  1. Da Observable Object a Event Dispatcher
  2. Da Event Dispatcher a Observer (s).

Come decidi di passare questi messaggi Sync o Async? Usi una particolare API (in Java) per implementarla?

Ad esempio, in Java JFC / Swing, il primo è Async e il secondo è Sync. Il primo è il motivo per cui è possibile generare altri eventi anche se il programma sta elaborando un altro evento. Quest'ultimo è il motivo per cui si dovrebbero evitare lunghe operazioni nei listener poiché bloccano il dispatcher di eventi.

    
posta salman.mirghasemi 22.07.2011 - 17:10
fonte

2 risposte

1

Una coda di attesa o di priorità dall'oggetto osservabile al dispatcher di eventi che utilizza il trasferimento asincrono dei messaggi sarebbe perfettamente soddisfacente (a causa dei motivi che hai già fornito).

A meno che non si usi il parallelismo, il dispatcher di eventi dovrebbe essere Syncronus e anche allora dovrebbe avere una sorta di semaforo per assicurarsi che non più di X il numero di osservatori (o le istanze dello stesso osservatore che stanno attenti attorno alle aree di mutex) essere spinto a; dove X dovrebbe coincidere con il numero di core su cui stai correndo parallelamente. Semplici semafori sono abbastanza facili da implementare in qualsiasi linguaggio e penso che Java abbia un sistema integrato per implementarli.

    
risposta data 22.07.2011 - 18:23
fonte
1

Non esiste una regola rigida per questo. La consegna asincrona implica più thread, il che aumenta la complessità della soluzione, ma aumenta anche la flessibilità. La sincronia potrebbe essere migliore per i casi in cui i gestori di eventi potrebbero trarre vantaggio dalla condivisione di risorse (ad esempio una connessione al database), poiché i gestori sarebbero in esecuzione sullo stesso thread.

    
risposta data 22.07.2011 - 18:41
fonte

Leggi altre domande sui tag