Java 8 CompletableFuture против Netty Future

Как CompletableFuture, введенный в JDK 8, сравнивается с io.netty.util.concurrent.Future, предоставленным Netty?

В документации Netty упоминается, что

JDK 8 добавляет CompletableFuture, который несколько перекрывает io.netty.util.concurrent.Future http://netty.io/wiki/using-as-a-generic-library.html

Вопросы, на которые я пытаюсь получить ответы:

  1. В чем их сходство и различие?
  2. Чем отличаются их рабочие характеристики? Какой из них лучше масштабируется?

Что касается сходства/различия, я смог придумать следующее:

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

Различия: CompletableFuture, кажется, имеет гораздо более богатый интерфейс для таких вещей, как составление нескольких асинхронных действий и т. д. С другой стороны, Netty io.netty.util.concurrent.Future позволяет добавлять несколько слушателей в одно и то же Future и, кроме того, позволяет слушателям удалить.


person Prateek    schedule 07.12.2015    source источник
comment
Вы можете вызывать методы CompletableFuture.thenDoSomething() несколько раз, что аналогично добавлению нескольких слушателей в других будущих фреймворках.   -  person Vladimir Korenev    schedule 07.12.2015
comment
Есть ли в CompletableFuture цикл обработки событий, как в Netty Future?   -  person user1870400    schedule 15.04.2016
comment
@user1870400 user1870400 CompletableFuture (и любой другой класс, реализующий CompletionStage ) имеет такие методы, как thenApply и thenApplyAsync, которые работают по-разному. Такие методы, как thenApply, будут выполняться немедленно в том же потоке, в то время как thenApplyAsync будет выполняться с использованием Executor, который может быть реализован с помощью цикла обработки событий (хотя по умолчанию используется пул для перехвата работы).   -  person kag0    schedule 11.04.2017
comment
Здесь есть обсуждение этой темы: github.com/netty/netty/issues/2105   -  person ccleve    schedule 16.05.2017


Ответы (1)


Если мы посмотрим на весь этот абзац (особенно на первое предложение)

Java иногда совершенствуется, принимая идеи, которые включают в себя конструкции, предоставленные Netty. Например, JDK 8 добавляет CompletableFuture, который несколько перекрывает io.netty.util.concurrent.Future. В таком случае конструкции Netty предоставляют вам хороший путь миграции; Мы будем тщательно обновлять API с учетом будущей миграции.

По сути, это говорит о том, что netty Future и CompletableFuture — это одна и та же концепция, но реализованная в разное время разными людьми.
Netty создали свое будущее, потому что в Java не было ни одной доступной версии, и они не хотели тянуть один в качестве зависимости от чего-то вроде Guice. Но теперь Java создала его, и он доступен для использования.
В конце абзаца они в основном говорят, что netty API может заменить Future на CompletableFuture в будущем.
Что касается сходства/различия. , они оба являются лишь одной из многих реализаций шаблона future/promise. Используйте netty, когда вы используете netty api и специальные вещи netty, в противном случае используйте CompletableFuture.

person kag0    schedule 11.04.2017