В исходном коде Reactor много случаев использования интерфейса Fuseable, но я не могу найти никакой ссылки, что это такое. Может ли кто-нибудь объяснить его цель?
Для чего нужен интерфейс Fuseable в проекте Reactor?
Ответы (1)
Интерфейс Fuseable
и содержащиеся в нем интерфейсы определяют контракты, используемые для объединения потоков. Слияние потоков - это оптимизация реактивных потоков.
Без какой-либо такой оптимизации (при «нормальном» исполнении, если хотите), каждый реактивный оператор:
- Подписка на предыдущего оператора в цепочке
- Уведомляется, когда подписчик завершил
- Выполняет свою операцию
- Уведомляет своих подписчиков
... и затем цикл повторяется для всех операторов. Это замечательно для того, чтобы все оставалось неблокирующим, но все эти асинхронные вызовы сопряжены с определенными накладными расходами.
«Слияние потоков» (или «слияние операторов») значительно сокращает эти накладные расходы, выполняя две или более операций в одном фрагменте (объединяя их вместе как одно целое), передавая значения между ними с помощью Queue
или аналогичного, а не через подписки, что исключает это накладные расходы. Конечно, это не всегда возможно - этого нельзя сделать при параллельной работе, при определенных побочных эффектах и т. Д. - но аккуратная оптимизация, когда это возможно.