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

Матеріал з Вікіпедії — вільної енциклопедії.
Версія від 22:18, 27 листопада 2021, створена Andriy.vBot (обговорення | внесок) (виправлення дат)
Перейти до навігації Перейти до пошуку

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

Ланки

  •  Ця стаття включає текст із http://www.reactive-streams.org/, опублікований під ліцензією CC0 1.0 Universal (CC0 1.0) Public Domain Dedication.