Реактивні потоки
Реакти́вні пото́ки (англ. Reactive Streams) — це ініціатива із запровадження стандарту для асинхронної потокової обробки із неблоковним зворотним тиском[1].
Основним завданням реактивних потоків є керування обміном потоковими даними через асинхронну межу — таку, як передача елементів до іншої нитки або пулу ниток — забезпечуючи, що одержуюча сторона не змушується буферизувати необмежену кількість даних. Іншими словами, зворотній тиск є невід’ємною частиною цієї моделі щоби дозволити чергам, які обслуговують взаємодію ниток бути обмеженими.
Задумано дозволити створення багатьох сумісних реалізацій, які в силу дотримання правил стандарту зможуть безпроблемно взаємодіяти, зберігаючи згадані переваги і характеристики вздовж усього графу обробки потоку.
Обсягом стандарту є мінімальний набір інтерфейсів, методів і протоколів, які описують необхідні операції та об'єкти для досягнення асинхронних потоків даних із неблокуючим зворотнім тиском. Предметно-орієнтована мова (DSL) або API цілеспрямовано були залишені за межами стандарту з метою заохочення і дозволу різних реалізацій.
Ініціатива реактивних потоків почалася наприкінці 2013 року між інженерами Netflix, Pivotal і Typesafe. Найперші обговорення відбулися у 2013 році між командами Play і Akka у Typesafe.[2][3] Typesafe є одним із основних розробників реактивних потоків.[4] Інші учасники включають Red Hat, Oracle, Twitter і spray.io[5] Ведеться робота, щоб зробити реалізацію реактивних потоків на Java частиною Java 9: Даг Лі, лідер JSR 166, запропонував[6] новий клас Flow[7] який реалізує інтерфейси описані у стандарті Реактивних потоків.[4][8]
30 квітня 2015 вийшла версія 1.0.0 реактивних потоків для JVM,[4][5][9] включно із Java API,[10] текстовою специфікацією,[11] TCK та прикладами реалізації. Існує ряд сумісних реалізацій, які перевірені за допомогою TCK на відповідність стандарту, перелічені у алфавітному порядку:
- Akka Streams[12][13]
- MongoDB[14]
- Ratpack[15]
- Reactive Rabbit — драйвер для RabbitMQ/AMQP
- Spring і Pivotal Reactor[16]
- Netflix RxJava[17]
- Slick 3.0.[18][19]
- Vert.x 3.0[20]
Інші реалізації включають Cassandra,[21] Elasticsearch,[22] Apache Kafka,[23] Parallel Universe Quasar,[24] Play Framework.[25]
- ↑ Reactive Streams [Архівовано 15 січня 2016 у Wayback Machine.] (англ.)
- ↑ A Journey into Reactive Streams [Архівовано 24 грудня 2015 у Wayback Machine.] (англ.)
- ↑ Reactive Streams 1.0.0 interview [Архівовано 14 січня 2016 у Wayback Machine.] (англ.)
- ↑ а б в Reactive Streams Releases First Stable Version for JVM [Архівовано 26 лютого 2016 у Wayback Machine.] (англ.)
- ↑ а б Reactive Streams 1.0.0 – a new standard in reactive data processing [Архівовано 4 березня 2016 у Wayback Machine.] (англ.)
- ↑ jdk9 Candidate classes Flow and SubmissionPublisher [Архівовано 20 січня 2015 у Wayback Machine.] (англ.)
- ↑ java.util.concurrent.Flow [Архівовано 3 лютого 2016 у Wayback Machine.] (англ.)
- ↑ JEP 266: More Concurrency Updates [Архівовано 16 серпня 2020 у Wayback Machine.] (англ.)
- ↑ Reactive Streams 1.0.0 is here! [Архівовано 4 березня 2016 у Wayback Machine.] (англ.)
- ↑ Java API [Архівовано 21 лютого 2016 у Wayback Machine.] (англ.)
- ↑ Reactive Streams for the JVM specification. Архів оригіналу за 14 січня 2016. Процитовано 31 січня 2016.
- ↑ InfoQ: Reactive Streams with Akka Streams. Архів оригіналу за 4 березня 2016. Процитовано 31 січня 2016.
- ↑ Design Principles behind Akka Streams. Архів оригіналу за 12 січня 2016. Процитовано 31 січня 2016.
- ↑ MongoDB Reactive Streams Java Driver. Архів оригіналу за 20 лютого 2016. Процитовано 31 січня 2016.
- ↑ Ratpack: The Reactive Streams API. Архів оригіналу за 21 січня 2016. Процитовано 31 січня 2016.
- ↑ Reactor 2.0.0.RC1 with native Reactive Streams support now available!. Архів оригіналу за 20 січня 2016. Процитовано 31 січня 2016.
- ↑ Advanced RxJava: The Reactive-Streams API (part 1). Архів оригіналу за 24 грудня 2015. Процитовано 31 січня 2016.
- ↑ Slick 3: Reactive Streams for Asynchronous Database Access in Scala. Архів оригіналу за 31 січня 2016. Процитовано 31 січня 2016.
- ↑ Slick 3.0.0. Архів оригіналу за 7 лютого 2016. Процитовано 31 січня 2016.
- ↑ Vert.x Reactive Streams Integration. Архів оригіналу за 11 лютого 2016. Процитовано 31 січня 2016.
- ↑ Accessing Cassandra in a Reactive Way. Архів оригіналу за 16 січня 2016. Процитовано 31 січня 2016.
- ↑ elastic4s — Non blocking, type safe DSL and Scala client for Elasticsearch. Архів оригіналу за 15 січня 2018. Процитовано 31 січня 2016.
- ↑ Reactive Streams for Apache Kafka. Архів оригіналу за 4 березня 2016. Процитовано 31 січня 2016.
- ↑ Quasar and Reactive Streams. Архів оригіналу за 4 жовтня 2015. Процитовано 31 січня 2016.
- ↑ Play Framework — Reactive Streams integration (experimental). Архів оригіналу за 24 грудня 2015. Процитовано 31 січня 2016.
- Ця стаття включає текст із http://www.reactive-streams.org/ [Архівовано 15 січня 2016 у Wayback Machine.], опублікований під ліцензією CC0 1.0 Universal (CC0 1.0) Public Domain Dedication.