Per rispondere alla seconda domanda, ecco un problema che può trarre molto beneficio da Rx. Si chiama "Diventa ricco in fretta".
Hai sviluppato un gioco con lo stesso nome e sta vendendo abbastanza bene. Ma è disponibile solo nei tuoi negozi per la vendita all'ingrosso. Per facilitare l'elaborazione del denaro contante, hai un nastro trasportatore che scorre verso di te.
(Non esitate a cambiare la storia sopra :))
Gli addetti alle vendite posizionano su di esso mazzette di denaro senza etichette che indicano l'ammontare e il tipo di fatture nel batuffolo. Il tuo compito è quello di ordinare e contare i soldi. Più tardi, quando ottieni più denaro, puoi assumere altri per aiutarti.
In questo caso, la fonte è una fonte asincrona di batuffoli di denaro (produttore). I vostri dipendenti e fornitori si aspettano soldi, ma dovete consumare le mazzette, spacchettarle e usare la vostra logica aziendale personalizzata per riconfezionare come appropriato per pagarle.
Gli addetti alle vendite corrono sul proprio thread, in modo che non debbano aspettare che tu conti ciò che gettano sulla cintura. Il tuo tempo viene sfruttato al meglio se ti viene detto quando è disponibile più denaro per contare, fino ad allora puoi svolgere altri lavori.
Puoi rappresentare ogni mazzetta con un byte [].
Questa è una situazione del mondo reale abbastanza comune; quando recuperi qualsiasi risorsa [ad esempio pagine Web per motori di ricerca, immagini o video] su una rete o dati da periferiche, li ottieni in blocchi di byte (possibilmente con intestazioni). In un singolo thread o in un ambiente multi-thread con cui è troppo difficile lavorare, si tende ad aggregarli ed elaborarli. Non più!!