Шаблон Java Reactor с пакетом java.io - PullRequest
9 голосов
/ 29 марта 2012

Я вижу в нескольких источниках приложений, таких как Minecraft и JIrcs, они оба используют java.io для реализации Reactor Plugin (если я не ошибаюсь), а также в этой статье .Итак, в чем разница между java.io и java.nio при реализации шаблона Reactor?Я имею в виду, например, преимущество в производительности, эффективность процесса и т. Д., И где я могу получить хороший учебник, если вы считаете, что java.io - хорошее решение для реализации шаблона Reactor (поскольку Google дает мне тонны java.nio, а не java.io, как я хочу)

Ответы [ 3 ]

1 голос
/ 23 мая 2014

Неверно, что NIO быстрее. Пол Тайма разрушил этот миф когда-то назад.

http://mailinator.blogspot.in/2008/02/kill-myth-please-nio-is-not-faster-than.html

http://paultyma.blogspot.in/2008/03/writing-java-multithreaded-servers.html

Надеюсь, что поможет.

0 голосов
/ 23 мая 2014

Важно понимать разницу между блокирующим и неблокирующим вводом / выводом.Пакет java.io НЕ поддерживает неблокирующий ввод / вывод, поэтому он не будет масштабироваться для большого количества соединений.Более того, с блокировкой ввода / вывода вы можете прибегнуть только к ужасной модели «один клиент к одному потоку» , которая совершенно не подходит для систем с малой задержкой.Я предлагаю вам взглянуть на эту статью , написанную мной об асинхронной сетевой библиотеке ввода-вывода, которая реализует схему реактора, чтобы вы могли понять, как неблокирование играет ключевую роль в высокопроизводительных системах.

0 голосов
/ 26 января 2013

Я надеюсь, что вы можете получить заключение с помощью приведенной ниже информации, взятой из книги на странице №42

java.io. * классы используют декоратор дизайн шаблона .Шаблон проектирования декоратора накладывает ответственность на объекты во время выполнения.Декораторы более гибки, чем наследование, потому что наследование накладывает ответственность на классы во время компиляции .Классы java.io. * используют шаблон декоратора для создания различных комбинаций поведения во время выполнения на основе некоторых базовых классов.

и 43.

Java уже давноподходит для разработки программ, которые выполняют много операций ввода-вывода.Кроме того, обычно не были доступны такие задачи, как блокировка файлов, неблокирующие и асинхронные операции ввода-вывода и возможность сопоставления файлов с памятью.Неблокирующие операции ввода / вывода были достигнуты за счет обхода, такого как многопоточность или использование JNI. Новый API ввода-вывода (он же NIO ) в J2SE 1/4 изменил эту ситуацию.Готовность сервера эффективно обрабатывать несколько клиентских запросов зависит от того, как он использует потоки ввода / вывода.Когда сервер должен обрабатывать сотни клиентов одновременно, он должен иметь возможность использовать службы ввода-вывода одновременно. Один из способов удовлетворить этот сценарий в Java - это использовать потоки, но с почти одинаковым соотношением потоков (100 клиентовбудет иметь 100 потоков) склонен к огромным издержкам потока и может привести к проблемам с производительностью и масштабируемостью из-за использования стеков памяти (т. е. каждый поток имеет свой стек, см. Q34 , Q42 в разделе Java) и переключение контекста процессора (т. Е. Переключение между потоками, а не выполнение реальных вычислений.).Чтобы преодолеть эту проблему, новый набор неблокирующих классов ввода / вывода был представлен на платформе Java в пакете java.nio.Неблокирующий механизм ввода / вывода построен вокруг селекторов и каналов. Каналы , Буферы и Селекторы являются ядром NIO.

и подробнее .Вот некоторые справочные ссылки, которые предоставляют Java IO против Java NIO: Java IO быстрее, чем NIO - старый снова новый! , Java IO против Java NIO и IO против NIO- прерывания, таймауты и буферы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...