Являются ли неблокирующие операции ввода-вывода по-прежнему проблемой для Java на стороне сервера?

Java NIO Socket Framework предположительно скрывает от разработчиков грязные подробности неблокирующего ввода-вывода, позволяя им создавать масштабируемые приложения, которые могут обрабатывать более 10000 входящих и исходящих сокетов, используя только один поток.

  • Являются ли неблокирующие операции ввода-вывода проблемой для типичной версии Java 2 SE/EE?

  • Эта структура все еще необходима и полезна?

Спасибо за ваше время.


person Robin Rodricks    schedule 14.09.2009    source источник
comment
У обоих есть свои применения, NIO добавляет больше сложности. Что вы хотите делать с сервером сокетов?   -  person James Black    schedule 14.09.2009


Ответы (2)


Ну, NIO, конечно, создает абстракцию над некоторыми деталями. Неблокирующий ввод-вывод по-прежнему вызывает затруднения (по крайней мере, я считаю, что это так), но, по крайней мере, это осуществимо. (Лично я предпочитаю асинхронный ввод-вывод в стиле .NET, но это другое дело.)

Я обычно использую блокирующий ввод-вывод: для большинства задач это все, что мне нужно, и я не получил бы значительных преимуществ, используя неблокирующий ввод-вывод. В некоторых случаях (например, в том, который вы упомянули) неблокирующий ввод-вывод действительно является единственным путем вперед, если вы хотите сохранить поток.

Я рекомендую вам узнать об этом, поэкспериментировать с этим, а затем рассудительно решить, когда использовать его в производственном коде. Я бы не советовал начинать использовать его везде...

person Jon Skeet    schedule 14.09.2009

Да, NIO очень полезен. С NIO также немного сложно работать. В зависимости от ваших потребностей вы можете рассмотреть возможность использования фреймворков, обертывающих NIO, таких как grizzly или мина. Grizzly — это сетевая часть сервера приложений glassfish от sun Oracle.

Mina — это инфраструктура сетевых приложений от Apache.org.

Лично я предпочитаю гризли, но это только я.

person Erik    schedule 15.09.2009