Multi threaded e event driven [chiuso]

1

Ho avuto questo problema in un'intervista e voglio confermare che il multi-threading non aggiunge alcun valore qui.

Caso:

  • Stai scrivendo un agente per acquistare azioni.

  • L'agente viene inizializzato con un insieme di scorte da acquistare quando raggiungono un determinato prezzo.

  • Un servizio separato (fuori ambito) monitora il mercato e invoca un callback sul tuo agente quando un pice cambia (l'agente implementa un'interfaccia che fornisce il metodo di callback)

  • La richiamata può essere invocata per titoli a cui non ti interessa, e quando viene invocato per un titolo che ti interessa, devi controllare che il prezzo sia il prezzo che vuoi acquistare.

  • Quando determini di dover acquistare, invochi un servizio esterno fuori ambito.

  • L'agente verrà eseguito in modo asincrono da qualche motore che lo crea.

  • Quando tutti gli stock (al prezzo desiderato) sono stati acquistati, l'agente si spegne.

  • Il motore che si trova nell'agente è fuori portata.

Non vedo il vantaggio di avere l'agente asincrono.

    
posta AfterWorkGuinness 04.07.2016 - 21:32
fonte

1 risposta

4

Capisco dalla tua affermazione che nel caso, l'agente viene eseguito in modo asincrono in un thread separato.

Immagina cosa succederebbe se l'agente eseguisse in modo sincrono:

  • il servizio di monitoraggio chiamerebbe l'agente e attenderà fino al termine dell'agente.
  • nel frattempo non controlla più nulla
  • forse anche perderà una buona occasione perché il prezzo è sceso mentre il servizio era in attesa dell'agente e risaliva in seguito
  • forse il servizio di monitoraggio serve diversi agenti in esecuzione per diversi clienti, diversi eventi che guardano per gli stessi stock. Questi altri agenti rimarrebbero quindi in attesa, perdendo opportunità (e i clienti chiederanno la parità di trattamento).

L'agente asincrono consente al servizio di monitoraggio di continuare a monitorare senza rimanere bloccato. Anche se il primo acquisto non è terminato, il servizio di monitoraggio potrebbe già invocare un nuovo acquisto beneficiando del prezzo basso (nel caso in cui diversi agenti vengano eseguiti contemporaneamente) prima che salga (o se c'è un singolo agente, almeno non mancherà colpire di un certo prezzo).

Si noti inoltre che in caso di più agenti, ogni agente potrebbe anche attendere la connessione con un sistema transazionale che registra l'acquisto. Una connessione sincrona rallenterebbe ulteriormente il sistema di monitoraggio. Con la progettazione asincrona, gli agenti in attesa non propagano i ritardi. Quindi, alla fine, si noterà sicuramente anche un throughput più elevato.

Quindi sì, il multithreading asincrono è un vantaggio reale qui. È la chiave per la reattività di un sistema complesso, sia per interfacce utente o sistemi di trading .

    
risposta data 04.07.2016 - 21:43
fonte

Leggi altre domande sui tag