Каковы Горячие и Холодные наблюдаемые?

StackOverflow https://stackoverflow.com/questions/2521277

  •  22-09-2019
  •  | 
  •  

Вопрос

Я смотрел видео и я знаю общие принципы - горячее случается, даже когда никто не подписан, холодное случается "по требованию".Кроме того, Publish() преобразует холодное в горячее, а Defer() преобразует горячее в холодное.

Но все же я чувствую, что упускаю детали.Вот несколько вопросов, на которые я хотел бы получить ответы:

  • Можете ли вы дать исчерпывающее определение этим терминам?
  • Имеет ли когда-нибудь смысл вызывать Publish для горячей наблюдаемой или Defer для холодной?
  • Каковы аспекты горячих / холодных конверсий - теряете ли вы сообщения, например?
  • Существуют ли различия между горячими и холодными определениями для IObservable и IEnumerable?
  • Каковы общие принципы, которые вы должны учитывать при программировании на холодную или горячую воду?
  • Есть еще какие-нибудь советы по горячим / холодным наблюдаемым?
Это было полезно?

Решение

Я надеюсь, что это поможет.

Можете ли вы дать исчерпывающее определение этим терминам?

Смотрите мой пост в блоге по адресу: http://leecampbell.blogspot.com/2010/08/rx-part-7-hot-and-cold-observables.html

Имеет ли когда-нибудь смысл вызывать Опубликовать на горячей наблюдаемой или Отложить на холодной?

Нет, ничего подобного я не могу придумать.

Каковы аспекты горячего / холодного конверсии - теряете ли вы сообщения, например?

Сообщения могут "теряться", когда Наблюдаемый объект горячий, поскольку "события" происходят независимо от подписчиков.

Существуют ли различия между горячими и холодными определениями для IObservable и IEnumerable?

Я действительно не понимаю вопроса.Однако я надеюсь, что эта аналогия поможет.Я бы сравнил Hot Observable с Нетерпеливо оцениваемым IEnumerable .т. е. Список или Массив оба с готовностью оцениваются и были заполнены, даже если над ними никто не перечисляет.Оператор yield, который получает значения из файла или базы данных, может быть лениво вычислен с помощью ключевого слова Yield.Хотя lazy может быть хорошим, по умолчанию он будет переоценен, если по нему будет запущен второй перечислитель.Сравнивая их с наблюдаемыми, горячей наблюдаемой может быть Событие (нажатие кнопки) или поток температур;эти события будут происходить независимо от подписки, а также будут общедоступными, если на одно и то же наблюдение было оформлено несколько подписок.Наблюдаемый.Интервал является хорошим примером холодного наблюдаемого.Он начнет выдавать значения только тогда, когда будет оформлена подписка.Если сделано несколько подписок, то последовательность будет переоценена, и "события" будут происходить в разное время (в зависимости от времени между подписками).

Каковы общие принципы, которые вы должны учитывать при программировании на холодную или горячую воду?

Обратитесь к ссылке в пункте первом.Я бы также рекомендовал вам изучить, используется ли Publsh в сочетании с RefCount .Это позволяет вам иметь возможность использовать семантику отложенной оценки холодных наблюдаемых, но при этом обмениваться событиями, которые получают горячие наблюдаемые.

Есть еще какие-нибудь советы по горячему / холодному наблюдаемые?

Испачкайте руки и поиграйте с ними.Как только вы прочитаете о них более 30 минут, время, потраченное на кодирование с ними, станет для вас гораздо более продуктивным, чем дальнейшее чтение :)

Другие советы

Горячие наблюдаемые - это те, которые продвигаются, даже если вы не подписаны на наблюдаемые.Например, движения мыши, или тиканье таймера, или что-то в этом роде.Холодные наблюдаемые - это те, которые начинают продвигаться только тогда, когда вы подписываетесь, и они начинаются заново, если вы подписываетесь снова.

Не претендуя на то, чтобы дать исчерпывающий ответ, я хотел бы в простейшей форме обобщить то, что я узнал со времени постановки этого вопроса.

Горячий наблюдаемый является точным соответствием событию.В событиях значения обычно передаются в обработчик, даже если ни один подписчик не прослушивает.Все подписчики получают один и тот же набор значений.Из-за следования шаблону "событие" горячими наблюдаемыми являются легче понять чем те, что холодные.

Наблюдаемый холод это также похоже на событие an, но с изюминкой - событие Cold observable не является свойством общего экземпляра, это свойство объекта, которое создается на фабрике каждый раз, когда кто-то подписывается.Кроме того, подписка запускает создание значений.Из-за вышесказанного несколько подписчиков изолированы, и каждый получает свой собственный набор значений.

Самая распространенная ошибка, которую допускают новички RX, - это создание холодной наблюдаемой (ну, думая, что они создают холодную наблюдаемую), используя некоторые переменные состояния внутри функции (напримернакопленный итог) и не оборачивать его в оператор .Defer() .В результате несколько подписчиков совместно используют эти переменные и вызывают побочные эффекты между ними.

Наблюдаемый

Концептуально observable - это просто оболочка вокруг некоторого источника данных или событий, предоставляющая некоторый удобный интерфейс для обработки источника как потока данных, который обновляет свои значения в режиме реального времени.

Наблюдаемый холод

В "холодной" версии исходный код не активен и его можно сравнить с чертежом, классами или прототипами.Следовательно, наблюдаемое ничего не производит.Как ожидающий или приостановленный поток.Это делает его чистым значением, которое вы можете безопасно передать чистой функции.Хорошим примером является приостановленный счетчик, который при активации всегда начинается с 1.

"Подписка" на "холодную наблюдаемую" означает две вещи:Создание (или разветвление) активного экземпляра потока данных и подключение подписчика.Первая часть аналогична созданию объектов из класса.Вторая часть является фактической подпиской и сама по себе не имеет ничего общего с первой частью.

Горячий Наблюдаемый

"Горячая наблюдаемая" - это уже запущенный экземпляр.Как объект, созданный на основе прототипа и готовый к использованию.И подписка включает в себя только фактическое присоединение наблюдателя.Никакая часть активации не требуется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top