Реактивные потоки
Первоначальный выпуск | 15 мая 2015 г |
---|---|
Стабильная версия | 1.0.3 / 23 августа 2019 г |
Репозиторий | github |
Написано в | Java (Scala, Groovy, Котлин), .NET |
Веб-сайт | реактивные потоки |
Reactive Streams — это инициатива, направленная на создание обработки потоков стандарта асинхронной с неблокирующим обратным давлением. [1] [2]
Источник
[ редактировать ]Реактивные потоки начались как инициатива в конце 2013 года между инженерами Netflix , Pivotal и Lightbend . Некоторые из первых обсуждений начались в 2013 году между командами Play и Akka в Lightbend. [3] [4] Lightbend — один из основных разработчиков Reactive Streams. [5] Среди других участников — Red Hat , Oracle , Twitter иspray.io. [6]
Цели
[ редактировать ]Основная цель Reactive Streams — управлять обменом потоковыми данными через асинхронную границу — например, передавать элементы в другой поток или пул потоков — при этом гарантируя, что принимающая сторона не будет вынуждена буферизовать произвольные объемы данных. Другими словами, противодавление является неотъемлемой частью этой модели, позволяющей очереди , которые являются посредниками между потоками ограничить .
Цель спецификации — разрешить создание множества соответствующих реализаций , которые благодаря соблюдению правил смогут беспрепятственно взаимодействовать , сохраняя упомянутые преимущества и характеристики во всем графе обработки потокового приложения. Свободно доступный комплект совместимости технологий. [7] был разработан вместе со спецификацией, что позволяет разработчикам спецификации проверять, охватывают ли они все правила и требования, включая проверку потенциальных условий гонки .
Область применения Reactive Streams — это минимальный набор интерфейсов , методов и протоколов, описывающих необходимые операции и объекты для достижения асинхронных потоков данных с неблокирующим обратным давлением. [2] для конечных пользователей DSL привязки протоколов или API-интерфейсы намеренно исключены из рассмотрения, чтобы поощрять и обеспечивать возможность различных реализаций, которые потенциально используют разные языки программирования , чтобы оставаться максимально верными идиомам своей платформы.
Включение в стандарт Java
[ редактировать ]Спецификация разработана с намерением в будущем включить ее в официальную стандартную библиотеку Java, если она окажется успешной и будет принята достаточным количеством библиотек и поставщиков.
Реактивные потоки были предложены стать частью Java 9 Дугом Ли , лидером JSR 166. [8] как новый класс Flow [9] это будет включать в себя интерфейсы, предоставляемые в настоящее время Reactive Streams. [5] [10] После успешного выпуска версии 1.0 Reactive Streams и растущего распространения предложение было принято, и Reactive Streams был включен в JDK9 через JEP -266. [10]
Принятие
[ редактировать ]30 апреля 2015 г. была выпущена версия 1.0.0 Reactive Streams для JVM . [5] [6] [11] включая Java API , [12] текстовая спецификация , [13] TCK и примеры реализации . Он поставляется с множеством совместимых реализаций, проверенных TCK для версии 1.0.0, перечисленных в алфавитном порядке: [11]
- Нравятся потоки [14] [15]
- МонгоБД [16]
- Крысиная стая [17]
- Reactive Rabbit — драйвер для RabbitMQ / AMQP
- Весна [2] и ключевой реактор проекта [18]
- Netflix RxJava [19]
- Слик 3.0 [20] [21]
- Верт.x 3.0 [22]
- Мятеж
- Гелидон
Другие реализации включают Cassandra , [23] Эластичный поиск , [24] Апач Кафка , [25] Параллельная Вселенная Квазар, [26] Игровая платформа , [27] Оружейная палата. [28]
Spring 5 будет построен на Reactor Core, совместимом с Reactive Streams. Объявлено, что [29]
Amazon объявила, что ее Amazon Web Services SDK будет поддерживать Reactive Streams, обеспечивая возможности потоковой передачи в ее клиентских библиотеках в версии 2.0. [30]
Reactive Streams 1.0.1 выпущен 9 августа 2017 г. и включает различные улучшения точности спецификаций, улучшения TCK и другие разъяснения. Спецификация, а также интерфейсы остались полностью обратно совместимыми с версией 1.0.0, однако были направлены на упрощение внедрения для будущих разработчиков, а также на соответствие некоторым дополнительным требованиям, установленным OpenJDK . [31]
Порты и влияния
[ редактировать ]- Прямой порт спецификации, интерфейсов и TCK был доступен той же рабочей группе для платформы .NET . [32]
- Когда язык Elixir представил свой потоковый API под названием GenStage, авторы выразили благодарность «[проектам] akka-streams и reactive-streams, которые предоставили нам рекомендации по реализации обмена между этапами, управляемого спросом». [33]
Цитаты
[ редактировать ]- ^ реактивные потоки.org
- ^ Перейти обратно: а б с Walls 2019 , стр. 243–245, §10.1.1 Определение реактивных потоков.
- ^ Путешествие в реактивные потоки
- ^ Интервью Reactive Streams 1.0.0
- ^ Перейти обратно: а б с Reactive Streams выпускает первую стабильную версию для JVM
- ^ Перейти обратно: а б Reactive Streams 1.0.0 – новый стандарт реактивной обработки данных
- ^ «Реактивные потоки TCK» . Гитхаб .
- ^ «Классы-кандидаты jdk9 Flow и SubmissionPublisher» . Архивировано из оригинала 20 января 2015 г. Проверено 23 декабря 2015 г.
- ^ "java.util.concurrent.Flow" . Архивировано из оригинала 3 февраля 2016 г. Проверено 23 декабря 2015 г.
- ^ Перейти обратно: а б JEP 266: дополнительные обновления параллелизма
- ^ Перейти обратно: а б Reactive Streams 1.0.0 уже здесь!
- ^ Java API
- ^ Реактивные потоки для спецификации JVM
- ^ InfoQ: Реактивные потоки с Akka Streams
- ^ «Принципы проектирования Akka Streams» . Архивировано из оригинала 12 января 2016 г. Проверено 23 декабря 2015 г.
- ^ Java-драйвер MongoDB Reactive Streams
- ^ Ratpack: API реактивных потоков
- ^ Доступен Reactor 2.0.0.RC1 со встроенной поддержкой Reactive Streams!
- ^ Расширенный RxJava: API Reactive-Streams (часть 1)
- ^ Замечание 3: Реактивные потоки для асинхронного доступа к базе данных в Scala
- ^ Слик 3.0.0
- ^ Интеграция реактивных потоков Vert.x
- ^ Доступ к Кассандре реактивным способом
- ^ elastic4s — неблокирующий типобезопасный клиент DSL и Scala для Elasticsearch.
- ^ Реактивные потоки для Apache Kafka
- ^ «Квазар и реактивные потоки» . Архивировано из оригинала 4 октября 2015 г. Проверено 24 декабря 2015 г.
- ^ Play Framework — интеграция с реактивными потоками (экспериментальная)
- ^ Армерия - Полностью асинхронная и реактивная
- ^ Реактивная пружина
- ^ «Объявление о предварительной версии AWS SDK для Java 2.0 для разработчиков» .
- ^ «Объявление о выпуске Reactive Streams 1.0.1» .
- ^ «Реактивные потоки .NET» . Гитхаб .
- ^ «Блог Elixir: анонс GenStage» .
Ссылки
[ редактировать ]- Уоллс, Крейг (октябрь 2019 г.). Весна в действии (Пятое изд.). Мэннинг . п. 520. ИСБН 9781617294945 .
- В этой статье использован текст с сайта www.
.reactive-streams .org , который выпущен под лицензией CC0 1.0 Universal (CC0 1.0) Public Domain .