Quais são os observáveis Quente e Frio?
-
22-09-2019 - |
Pergunta
Eu assisti o vídeo e conheço os princípios gerais - o calor acontece mesmo quando ninguém está inscrito, o frio acontece "sob demanda".Além disso, Publish() converte frio em quente e Defer() converte quente em frio.
Mesmo assim, sinto que estou perdendo os detalhes.Aqui estão algumas perguntas que gostaria de ter respondidas:
- Você pode dar uma definição abrangente para esses termos?
- Faz sentido chamar Publish em um observável quente ou Defer em um frio?
- Quais são os aspectos das conversões quentes/frias – você perde mensagens, por exemplo?
- Existem diferenças entre definições quentes e frias para IObservable e IEnumerable?
- Quais são os princípios gerais que você deve levar em consideração ao programar para frio ou calor?
- Alguma outra dica sobre observáveis quentes/frios?
Solução
Eu espero que isso ajude.
Você pode dar uma definição abrangente para estes termos?
Veja minha postagem no blog em: http://leecampbell.blogspot.com/2010/08/rx-part-7-hot-and-cold-observables.html
Já faz sentido chamar publicar em um observar ou adiar em um resfriado?
Não, não que eu consiga pensar.
Quais são os aspectos das conversões quentes/frias - você perde mensagens, por exemplo?
É possível “perder” mensagens quando o Observável está Quente, pois os “eventos” acontecem independentemente dos assinantes.
Existem diferenças entre definições quentes e frias para IObservable e Ienumerable?
Eu realmente não entendo a pergunta.Espero que esta analogia ajude.Eu compararia um Hot Observable a um IEnumerable avaliado com ansiedade.ou seja, uma lista ou uma matriz são avaliadas com atenção e foram preenchidas mesmo que ninguém as enumere.Uma instrução de rendimento que obtém valores de um arquivo ou banco de dados pode ser avaliada preguiçosamente com a palavra-chave Yield.Embora preguiçoso possa ser bom, ele será, por padrão, reavaliado se um segundo recenseador o passar por cima.Comparando-os com Observáveis, um Observável Quente pode ser um Evento (clique no botão) ou um feed de temperaturas;esses eventos acontecerão independentemente de uma assinatura e também serão compartilhados se várias assinaturas forem feitas para o mesmo observale.Observable.Interval é um bom exemplo de observável Cold.Só começará a produzir valores quando for feita uma assinatura.Se forem feitas múltiplas assinaturas, a sequência será reavaliada e os "eventos" ocorrerão em momentos separados (dependendo do tempo entre as assinaturas).
Quais são os princípios gerais que você deve levar em consideração ao programar para frio ou calor?
Consulte o link no ponto um.Eu também recomendo que você analise o Publsh sendo usado em conjunto com o RefCount.Isso permite que você tenha a semântica de avaliação Lazy de Cold Observables, mas o compartilhamento de eventos que Hot Observables obtém.
Alguma outra dica sobre observáveis quentes/frios?
Suje as mãos e brinque com elas.Depois de ler sobre eles por mais de 30 minutos, o tempo gasto codificando com eles será muito mais produtivo para você do que lendo mais :)
Outras dicas
Observáveis quentes são aqueles que estão avançando mesmo quando você não está inscrito no observável.Como movimentos do mouse, tiques do temporizador ou qualquer coisa assim.Observáveis frios são aqueles que começam a ser enviados apenas quando você se inscreve e recomeçam se você se inscreve novamente.
Sem a pretensão de dar uma resposta abrangente, gostaria de resumir da forma mais simples o que aprendi desde o momento desta pergunta.
Quente observável é uma correspondência exata para o evento.Em eventos, os valores geralmente são inseridos no manipulador mesmo que nenhum assinante esteja escutando.Todos os assinantes estão recebendo o mesmo conjunto de valores.Por seguirem o padrão de "evento", os observáveis quentes são mais fácil de entender do que os frios.
Frio observável também é como um evento, mas com uma diferença - o evento Cold observável não é uma propriedade em uma instância compartilhada, é uma propriedade em um objeto que é produzido em uma fábrica sempre que alguém se inscreve.Além disso, a assinatura inicia a produção dos valores.Devido ao acima exposto, vários assinantes são isolados e cada um recebe seu próprio conjunto de valores.
O erro mais comum que os iniciantes em RX cometem é criar um observável frio (bem, pensar que estão criando um observável frio) usando algumas variáveis de estado dentro de uma função (por exemplo,total acumulado) e não agrupá-lo em uma instrução .Defer().Como resultado, vários assinantes compartilham essas variáveis e causam efeitos colaterais entre eles.
Observável
Conceitualmente, observável é simplesmente um wrapper em torno de alguns dados ou fontes de eventos, fornecendo alguma interface conveniente para tratar a fonte como um fluxo de dados que atualiza seus valores em tempo real.
Frio Observável
Na versão “fria”, a fonte não está ativa e pode ser comparada a blueprint, classes ou protótipos.Portanto, o observável não produz nada.Como um fluxo pendente ou suspenso.Isso o torna um valor puro que você pode passar com segurança para uma função pura.Um bom exemplo é um contador suspenso que sempre começa com 1 quando ativado.
“Inscrever-se” em um “observável frio” significa duas coisas:Criar (ou bifurcar) uma instância de fluxo de dados ativa e anexar o assinante.A primeira parte é semelhante à criação de objetos a partir de uma classe.A segunda parte é a assinatura propriamente dita e por si só não tem nada a ver com a primeira parte.
Quente observável
O "hot observável" já é uma instância em execução.Como um objeto criado a partir do protótipo e pronto para uso.E a assinatura envolve apenas a anexação do observador real.Nenhuma parte de ativação é necessária.