Che cosa sono i flussi reattivi e cosa c'è di così speciale in loro?

0

Ho sfogliato Wikipedia e ho riscontrato una nuova funzionalità di Java 1.9: Stream reattivi .

Sfortunatamente, la pagina di Wikipedia collegata non aiuta molto a capire quali sono quei flussi reattivi e cosa li rende così speciali.

Si è detto che sono asincroni, quindi apparentemente c'è una sorta di buffer. È stato anche detto che c'è una contropressione non bloccante. Ma cos'è esattamente la contropressione non bloccante?

In che modo i flussi reattivi differiscono da precedenti strumenti di concorrenza come code di blocco / non bloccanti? Sono flussi di byte come TCP o flussi di messaggi come UDP / SCTP? Esiste una garanzia di consegna in ordine come in SCTP o le unità di dati possono essere riordinate come in UDP? I flussi reattivi sono affidabili come TCP e SCTP o è possibile che i dati vengano rilasciati come in UDP?

Verranno assegnati punti extra se la risposta include un esempio concreto di un problema difficile da risolvere con i precedenti strumenti di concorrenza, ma facile da risolvere con flussi reattivi.

    
posta juhist 16.07.2017 - 11:42
fonte

1 risposta

2

Relativo a SO: link

TCP, UDP e SCTP non sono flussi: sono protocolli di trasporto. Un flusso può essere implementato utilizzando uno qualsiasi di questi protocolli di trasporto, oppure può essere implementato utilizzando una named pipe, un buffer di memoria condiviso, una tecnologia MQ ...

Un flusso è un'astrazione che nasconde quel tipo di dettagli di basso livello e presenta il tuo programma con un meccanismo per trasmettere o ricevere alcune serie di oggetti o byte.

Un flusso è una soluzione per problemi legati alla comunicazione. Ciò può includere la comunicazione di rete, la comunicazione tra processi, la comunicazione tra thread e persino la comunicazione con un dispositivo o un file hardware.

Il termine reattivo si riferisce al Modello di programmazione reattiva , che si concentra su come per strutturare il codice responsabile della ricezione dei dati in modo asincrono.

Al livello più semplice, gli stream vengono in genere presentati a un destinatario tramite una sorta di buffer, spesso con un meccanismo di sicurezza del thread per garantire che la lettura / scrittura avvenga atomicamente.

Ricevere i dati da un flusso senza un'astrazione reattiva comporta in genere tecniche come "polling" (ispezione periodica) o il blocco di un thread e l'attesa per i dati - Spesso la soluzione risulta nella creazione di un'astrazione reattiva attorno a quel flusso.

Un flusso reattivo può usare un modello diverso come un segnale di evento, o può essere un'astrazione attorno a un sondaggio e / o "thread in attesa". Il termine "reattivo" implica che i dati siano ricevuti in modo asincrono (nota: ciò non significa necessariamente simultaneamente) - Un'astrazione reattiva di solito richiede l'associazione di un callback, un osservatore o un gestore di eventi per gestire i dati in entrata da quel flusso.

Un flusso può essere o non essere responsabile per l'ordine, consegna affidabile, buffering, ecc; si tratta di preoccupazioni generalmente legate ai dettagli di implementazione del flusso (o forse del trasporto sottostante).

Su una nota specifica sulla libreria Java Reactive Streams; il concetto è chiaramente niente di nuovo. Gli stream reattivi in Java sono sempre stati possibili.

Il razionale per la nuova libreria di Java è spiegato nella parte superiore di questa pagina: link

Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure.

In altre parole, sembra che Java stia tentando di fornire un insieme di interfacce e flussi di lavoro standard per i flussi reattivi; che (presumo, non sono un programmatore Java ..) probabilmente significa che il supporto attuale per le astrazioni del flusso reattivo è incoerente e frammentato.

In termini semplici, sembra che la libreria Reactive Streams stia tentando di risolvere un altro problema importante per i programmatori Java - consistenza .

    
risposta data 16.07.2017 - 12:47
fonte

Leggi altre domande sui tag