Преимущество использования NIO против BIO в пристани? - PullRequest
3 голосов
/ 27 декабря 2008

Есть ли опыт компромиссов с точки зрения био и био при наличии кучи и вычислительно интенсивного процесса, выполняемого для каждого запроса со временем выполнения в диапазоне (100 мс-900 мс)?

Ответы [ 3 ]

2 голосов
/ 28 декабря 2008

Реальная проблема заключается в том, сколько одновременных открытых соединений вы хотите иметь возможность масштабировать до физического сервера (скажем, для поддержки серверного обмена сообщениями по методу кометы - и кто не хочет делать это в наши дни?) , NIO реалистично выведет вас в диапазон от 10000 до 20000. Потоки являются чрезвычайно дорогим ресурсом с точки зрения реализации ОС (потребление памяти для каждого потока и издержки переключения контекста). Таким образом, тысячи подключений NIO могут поддерживаться скромным пулом потоков.

Используйте NIO-фреймворк, такой как MINA, и накатывание NIO совсем не плохо. (На самом деле чертовски легко.) Я прокатил свой собственный NIO, а затем включил MINA. MINA - хороший путь.

http://mina.apache.org/testimonials.html

EURid использовал MINA во время ландраша для доменных имен .eu 7го числа апрель 2006. Более 700.000 доменов имена были зарегистрированы во время первого 4 часа. Через час MINA обработано более 0,5 млн. SSL соединения.

Мы нашли скорость и стабильность МИНА, чтобы быть превосходным. И хотя мы мы все еще используем MINA 0.8.1, мы нашли API очень элегантный и простой.

2 голосов
/ 24 мая 2011

Одна вещь, которую вы должны принять во внимание, - это некоторые сообщения об ошибках в JVM для NIO, которые приводят к зависанию Jetty и использованию 100% процессорного времени. Итак, на данный момент, я рекомендую вам остаться с BIO, если вы видите такое поведение. Ссылки по теме:

http://jira.codehaus.org/browse/JETTY-937

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6403933

1 голос
/ 28 декабря 2008

Если вы не отправляете или не получаете огромные объемы данных, то соображения ЦП будут доминировать. java.nio сложнее в использовании, чем java.io (асинхронный ввод-вывод в JDK 7 будет где-то посередине). Если объем данных превышает буферизацию, вам может потребоваться выполнить ввод-вывод в другом потоке.

...