Для чего нужен интерфейс Fuseable в проекте Reactor?

В исходном коде Reactor много случаев использования интерфейса Fuseable, но я не могу найти никакой ссылки, что это такое. Может ли кто-нибудь объяснить его цель?


person Julian Rubin    schedule 05.08.2019    source источник


Ответы (1)


Интерфейс Fuseable и содержащиеся в нем интерфейсы определяют контракты, используемые для объединения потоков. Слияние потоков - это оптимизация реактивных потоков.

Без какой-либо такой оптимизации (при «нормальном» исполнении, если хотите), каждый реактивный оператор:

  • Подписка на предыдущего оператора в цепочке
  • Уведомляется, когда подписчик завершил
  • Выполняет свою операцию
  • Уведомляет своих подписчиков

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

«Слияние потоков» (или «слияние операторов») значительно сокращает эти накладные расходы, выполняя две или более операций в одном фрагменте (объединяя их вместе как одно целое), передавая значения между ними с помощью Queue или аналогичного, а не через подписки, что исключает это накладные расходы. Конечно, это не всегда возможно - этого нельзя сделать при параллельной работе, при определенных побочных эффектах и ​​т. Д. - но аккуратная оптимизация, когда это возможно.

person Michael Berry    schedule 05.08.2019