2015-12-07 4 views
8

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

Нетти документация упоминает, что

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

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

  1. Каковы были бы их сходства и различия ces be?
  2. Каким образом характеристики производительности двух отличаются? Какой из них сможет лучше масштабироваться?

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

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

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

+0

Вы можете вызвать 'CompletableFuture.thenDoSomething() 'несколько раз, что аналогично добавлению нескольких слушателей в другие будущие рамки. –

+0

Does CompletableFuture имеет цикл событий, такой как Netty Future? – user1870400

+0

@ user1870400 'CompletableFuture' (и любой другой класс, реализующий' CompletionStage'), имеют методы типа 'thenApply' и' thenApplyAsync', которые работают по-разному. Такие методы, как 'thenApply', будут выполняться немедленно в том же потоке, тогда как' thenApplyAsync' будет выполняться с использованием 'Executor', который может быть реализован с циклом событий (хотя по умолчанию это пул кражи работы). – kag0

ответ

1

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

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

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