Асинхронный IO в Java?

Вместо слов, хороший пример. Следующий код (если первое обещание разрешено):

Promise.resolve()
.then
(
  () => { throw new Error('Error occurs'); },
  err => console.log('This error is caught:', err)
);

идентично:

Promise.resolve()
.catch
(
  err => console.log('This error is caught:', err)
)
.then
(
  () => { throw new Error('Error occurs'); }
)

Но с отклоненным первым обещанием это не идентично:

Promise.reject()
.then
(
  () => { throw new Error('Error occurs'); },
  err => console.log('This error is caught:', err)
);

Promise.reject()
.catch
(
  err => console.log('This error is caught:', err)
)
.then
(
  () => { throw new Error('Error occurs'); }
)
57
задан thr 26 February 2009 в 20:29
поделиться

4 ответа

Пакет NIO Java (с Java6), оказывает поддержку для не блокирующийся ввод-вывод только, через Селектор с. Java7, надо надеяться, собирается поставляться с NIO.2, который включает асинхронную поддержку ввода-вывода. Сегодня, Ваш лучший выбор состоит в том, чтобы использовать платформу. Перемирие упомянуло Mina. Вот некоторые другие.

  1. Гризли . Это - ядро ввода-вывода для Sun сервер GlassFish . Гризли предоставляет средство для того, чтобы сделать асинхронные чтения/записи (с помощью модели очереди). Это поддерживает TCP и UDP одинаково. Я использовал Гризли в нескольких проектах. Существуют вещи, которые я люблю и не люблю о платформе, но детализировать это - действительно другая тема. Я скажу, что довольно легко разбудить что-то и выполнение, и Гризли делает большой тяжелый подъем для Вас.
  2. Netty. Этот проект появляется от одного из исходных авторов на проекте Mina. Я не использовал этого так, я не знаю приблизительно о его поддержке асинхронного ввода-вывода. Необходимо смотреть.

Теперь, относительно Вашего вопроса о потоках, Селекторы NIO не используют потоки для неблокирования ввода-вывода. В JDK6 они используют выбор () в соответствии с Windows и epoll средством на более новых ядрах Linux. Для асинхронного ввода-вывода распараллеливающие детали зависят от платформы.

45
ответ дан vbence 7 November 2019 в 16:06
поделиться

java.nio просто пакет - набор "немых" классов - отдельно он не использует использования потоков. При надлежащем использовании, такой как в Реакторный шаблон разработки можно достигнуть надлежащего, полностью масштабируемого, асинхронного ввода-вывода.

12
ответ дан Yuval Adam 7 November 2019 в 16:06
поделиться

Если Вы интересуетесь использованием его для Сетевого Материала. Действительно хороший выбор:

http://mina.apache.org/

Взглянул там его простое в использовании и очень мощное.

6
ответ дан 7 November 2019 в 16:06
поделиться

Другое предложение в отношении освобождает, был бы Naga (http://naga.googlecode.com). Это немного меньше похоже на платформу и больше как библиотека. Это пытается больше походить на обычные сокеты Java, если это - Ваша чашка чая. Это является минималистическим по сравнению с Гризли, Mina и Netty.

15
ответ дан Nuoji 24 November 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: