Реактивні потоки

Реакти́вні пото́ки (англ. 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 на відповідність стандарту, перелічені у алфавітному порядку:

Інші реалізації включають Cassandra,[21] Elasticsearch,[22] Apache Kafka,[23] Parallel Universe Quasar,[24] Play Framework.[25]

Примітки[ред. | ред. код]

  1. Reactive Streams [Архівовано 15 січня 2016 у Wayback Machine.] (англ.)
  2. A Journey into Reactive Streams [Архівовано 24 грудня 2015 у Wayback Machine.] (англ.)
  3. Reactive Streams 1.0.0 interview [Архівовано 14 січня 2016 у Wayback Machine.] (англ.)
  4. а б в Reactive Streams Releases First Stable Version for JVM [Архівовано 26 лютого 2016 у Wayback Machine.] (англ.)
  5. а б Reactive Streams 1.0.0 – a new standard in reactive data processing [Архівовано 4 березня 2016 у Wayback Machine.] (англ.)
  6. jdk9 Candidate classes Flow and SubmissionPublisher [Архівовано 20 січня 2015 у Wayback Machine.] (англ.)
  7. java.util.concurrent.Flow [Архівовано 3 лютого 2016 у Wayback Machine.] (англ.)
  8. JEP 266: More Concurrency Updates [Архівовано 16 серпня 2020 у Wayback Machine.] (англ.)
  9. Reactive Streams 1.0.0 is here! [Архівовано 4 березня 2016 у Wayback Machine.] (англ.)
  10. Java API [Архівовано 21 лютого 2016 у Wayback Machine.] (англ.)
  11. Reactive Streams for the JVM specification. Архів оригіналу за 14 січня 2016. Процитовано 31 січня 2016.
  12. InfoQ: Reactive Streams with Akka Streams. Архів оригіналу за 4 березня 2016. Процитовано 31 січня 2016.
  13. Design Principles behind Akka Streams. Архів оригіналу за 12 січня 2016. Процитовано 31 січня 2016.
  14. MongoDB Reactive Streams Java Driver. Архів оригіналу за 20 лютого 2016. Процитовано 31 січня 2016.
  15. Ratpack: The Reactive Streams API. Архів оригіналу за 21 січня 2016. Процитовано 31 січня 2016.
  16. Reactor 2.0.0.RC1 with native Reactive Streams support now available!. Архів оригіналу за 20 січня 2016. Процитовано 31 січня 2016.
  17. Advanced RxJava: The Reactive-Streams API (part 1). Архів оригіналу за 24 грудня 2015. Процитовано 31 січня 2016.
  18. Slick 3: Reactive Streams for Asynchronous Database Access in Scala. Архів оригіналу за 31 січня 2016. Процитовано 31 січня 2016.
  19. Slick 3.0.0. Архів оригіналу за 7 лютого 2016. Процитовано 31 січня 2016.
  20. Vert.x Reactive Streams Integration. Архів оригіналу за 11 лютого 2016. Процитовано 31 січня 2016.
  21. Accessing Cassandra in a Reactive Way. Архів оригіналу за 16 січня 2016. Процитовано 31 січня 2016.
  22. elastic4s — Non blocking, type safe DSL and Scala client for Elasticsearch. Архів оригіналу за 15 січня 2018. Процитовано 31 січня 2016.
  23. Reactive Streams for Apache Kafka. Архів оригіналу за 4 березня 2016. Процитовано 31 січня 2016.
  24. Quasar and Reactive Streams. Архів оригіналу за 4 жовтня 2015. Процитовано 31 січня 2016.
  25. Play Framework — Reactive Streams integration (experimental). Архів оригіналу за 24 грудня 2015. Процитовано 31 січня 2016.

Ланки[ред. | ред. код]