Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Реактивные Потоки является инициативой обеспечить стандарт для асинхронной обработки потока с неблокирующим обратным давлением. [1]

Происхождение [ править ]

Реактивные потоки начались в конце 2013 года как инициатива инженеров Netflix , Pivotal и Lightbend . Некоторые из самых ранних дискуссий начались в 2013 году между командами Play и Akka в Lightbend. [2] [3] Lightbend - один из основных разработчиков Reactive Streams. [4] Среди других участников - Red Hat , Oracle , Twitter и spray.io. [5]

Цели [ править ]

Основная цель Reactive Streams - управлять обменом потоковыми данными через асинхронную границу - например, передача элементов другому потоку или пулу потоков  - при обеспечении того, чтобы принимающая сторона не была вынуждена буферизовать произвольные объемы данных. Другими словами, обратное давление является неотъемлемой частью этой модели, позволяющей ограничивать очереди, которые являются посредниками между потоками .

Целью спецификации является создание множества соответствующих реализаций , которые в силу соблюдения правил смогут беспрепятственно взаимодействовать , сохраняя упомянутые преимущества и характеристики на всем графе обработки потокового приложения. Вместе со спецификацией был разработан свободно доступный комплект Technology Compatibility Kit [6], который позволяет разработчикам спецификации проверять, покрывают ли они все правила и требования, включая проверку возможных состояний гонки.

Объем Reactive Streams - это минимальный набор интерфейсов , методов и протоколов, которые описывают необходимые операции и сущности для достижения асинхронных потоков данных с неблокирующим обратным давлением. Конечные пользователи DSL или API привязки протоколов были намеренно исключены из области применения, чтобы поощрять и позволять различным реализациям, которые потенциально используют разные языки программирования, оставаться максимально верными идиомам своей платформы.

Включение в стандарт Java [ править ]

Спецификация разработана с целью включения в будущем в официальную стандартную библиотеку Java, если она окажется успешной и будет принята достаточным количеством библиотек и поставщиков.

Реактивные потоки были предложены стать частью Java 9 Дугом Ли , лидером JSR 166 [7], в качестве нового класса Flow [8], который будет включать интерфейсы, которые в настоящее время предоставляются Reactive Streams. [4] [9] После успешного выпуска 1.0 Reactive Streams и растущего внедрения предложение было принято, и Reactive Streams был включен в JDK9 через JEP- 266. [9]

Принятие [ править ]

30 апреля 2015 версии 1.0.0 реактивных потоков для JVM был выпущен, [4] [5] [10] в том числе Java API , [11] текстовая спецификация , [12] TCK и примеры реализации. Он поставляется с множеством совместимых реализаций, проверенных TCK для 1.0.0, перечисленных в алфавитном порядке: [10]

  • Ручьи Акка [13] [14]
  • MongoDB [15]
  • Крысиная стая [16]
  • Reactive Rabbit - драйвер для RabbitMQ / AMQP
  • Пружина и реактор основного проекта [17]
  • Netflix RxJava [18]
  • Slick 3.0 [19] [20]
  • Vert.x 3.0 [21]

Другие реализации включают Cassandra , [22] Elasticsearch , [23] Apache Kafka , [24] Parallel Universe Quasar, [25] Play Framework , [26] Armeria. [27]

Сообщается, что Spring 5 будет построен на базе Reactor Core, совместимой с Reactive Streams. [28]

Amazon объявила, что ее SDK Amazon Web Services будет поддерживать Reactive Streams для обеспечения потоковых возможностей в своих клиентских библиотеках в версии 2.0. [29]

Reactive Streams 1.0.1 выпущен 9 августа 2017 года, включая различные улучшения в точности спецификации, улучшения TCK и другие пояснения. Спецификация, а также интерфейсы оставались полностью обратно совместимыми с версией 1.0.0, однако были направлены на упрощение внедрения для будущих разработчиков, а также на согласование с некоторыми дополнительными требованиями, установленными OpenJDK. [30]

Порты и влияния [ править ]

  • Прямой перенос спецификации, интерфейсов и TCK был предоставлен той же рабочей группе для платформы .NET . [31]
  • Когда язык Elixir представил свой потоковый API под названием GenStage, авторы выразили благодарность «[проектам] akka-streams и reactive-streams, которые предоставили нам руководство по реализации обмена между этапами по запросу». [32]

Ссылки [ править ]

  1. ^ reactive-streams.org
  2. ^ Путешествие в реактивные потоки
  3. ^ Интервью Reactive Streams 1.0.0
  4. ^ a b c Реактивные потоки выпускают первую стабильную версию для JVM
  5. ^ a b Reactive Streams 1.0.0 - новый стандарт в реактивной обработке данных
  6. ^ «Реактивные потоки TCK» .
  7. ^ jdk9 Кандидатские классы Flow и SubmissionPublisher
  8. ^ java.util.concurrent.Flow
  9. ^ a b JEP 266: Дополнительные обновления параллелизма
  10. ^ a b Реактивные потоки 1.0.0 уже здесь!
  11. ^ Java API
  12. ^ Реактивные потоки для спецификации JVM
  13. ^ InfoQ: Реактивные потоки с потоками Akka
  14. ^ Принципы проектирования, лежащие в основе Akka Streams
  15. ^ Драйвер Java для реактивных потоков MongoDB
  16. ^ Ratpack: API реактивных потоков
  17. ^ Доступен Reactor 2.0.0.RC1 с нативной поддержкой Reactive Streams!
  18. ^ Advanced RxJava: API реактивных потоков (часть 1)
  19. ^ Слайд 3: Реактивные потоки для асинхронного доступа к базе данных в Scala
  20. ^ Slick 3.0.0
  21. ^ Интеграция реактивных потоков Vert.x
  22. ^ Доступ к Кассандре в реакционно Пути
  23. ^ elastic4s - Неблокирующий, типобезопасный клиент DSL и Scala для Elasticsearch
  24. ^ Реактивные потоки для Apache Kafka
  25. ^ Квазар и реактивные потоки
  26. ^ Play Framework - интеграция реактивных потоков (экспериментальная)
  27. ^ Armeria - полностью асинхронный и реактивный
  28. ^ Реактивная пружина
  29. ^ "Объявление о предварительной версии AWS SDK для разработчиков Java 2.0" .
  30. ^ "Объявление о выпуске Reactive Streams 1.0.1" .
  31. ^ "Реактивные потоки .NET" .
  32. ^ "Блог Elixir: Объявление GenStage" .
  •  Эта статья включает текст с сайта www .reactive-streams .org , который выпущен в рамках универсального (CC0 1.0) выделения общественному достоянию CC0 1.0 .