Реактивні потоки
Реакти́вні пото́ки (англ. 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 (англ.)
- A Journey into Reactive Streams Архівовано 24 грудня 2015 у Wayback Machine. (англ.)
- Reactive Streams 1.0.0 interview (англ.)
- Reactive Streams Releases First Stable Version for JVM (англ.)
- Reactive Streams 1.0.0 – a new standard in reactive data processing (англ.)
- jdk9 Candidate classes Flow and SubmissionPublisher (англ.)
- java.util.concurrent.Flow Архівовано 3 лютого 2016 у Wayback Machine. (англ.)
- JEP 266: More Concurrency Updates (англ.)
- Reactive Streams 1.0.0 is here! (англ.)
- Java API (англ.)
- Reactive Streams for the JVM specification
- InfoQ: Reactive Streams with Akka Streams
- Design Principles behind Akka Streams. Архів оригіналу за 12 січня 2016. Процитовано 31 січня 2016.
- MongoDB Reactive Streams Java Driver
- Ratpack: The Reactive Streams API
- Reactor 2.0.0.RC1 with native Reactive Streams support now available!
- Advanced RxJava: The Reactive-Streams API (part 1)
- Slick 3: Reactive Streams for Asynchronous Database Access in Scala
- Slick 3.0.0
- Vert.x Reactive Streams Integration
- Accessing Cassandra in a Reactive Way
- elastic4s — Non blocking, type safe DSL and Scala client for Elasticsearch
- Reactive Streams for Apache Kafka
- Quasar and Reactive Streams
- Play Framework — Reactive Streams integration (experimental)
Ланки
- Ця стаття включає текст із http://www.reactive-streams.org/, опублікований під ліцензією CC0 1.0 Universal (CC0 1.0) Public Domain Dedication.