Para responder à segunda pergunta, aqui está um problema que pode se beneficiar muito com o Rx. Chama-se "Fique rico rapidamente".
Você desenvolveu um jogo com o mesmo nome e está vendendo muito bem. Mas está disponível apenas em suas lojas para atacado. Para facilitar o processamento de dinheiro, você tem uma correia transportadora que flui em sua direção.
(Por favor, sinta-se livre para mudar a história acima :))
O pessoal de vendas coloca maços de dinheiro vinculados, sem rótulos, indicando a quantidade e o tipo de notas no maço. Seu trabalho é classificar e contar o dinheiro. Mais tarde, quando você receber mais dinheiro, poderá contratar outras pessoas para ajudá-lo.
Nesse caso, a fonte é uma fonte assíncrona de maços de dinheiro (Produtor). Seus funcionários e fornecedores esperam dinheiro, mas você precisa consumir os maços, desempacotá-los e usar sua lógica comercial personalizada para reembalar conforme apropriado para pagá-los.
O pessoal de vendas está executando em seu próprio segmento, para que eles não precisem esperar que você conte o que jogam no cinto. Seu tempo é melhor utilizado se lhe for dito quando mais dinheiro está disponível para contar, até então você poderá fazer outro trabalho.
Você pode representar cada maço por um byte [].
Esta é uma situação do mundo real bastante comum; ao recuperar qualquer recurso [por exemplo, páginas da web para mecanismos de pesquisa, imagens ou vídeos] em uma rede ou dados de periféricos, você os obtém em pedaços de bytes (possivelmente com cabeçalhos). Em um único encadeamento ou em um ambiente com vários encadeamentos muito difícil de trabalhar, você tende a agregá-los e processá-los. Não mais!!