Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Поясните разницу IO/NIO (socket-сервер на java) для социального приложения (http://www.flasher.ru/forum/showthread.php?t=139165)

mikhailk 24.04.2010 21:49

Поясните разницу IO/NIO (socket-сервер на java) для социального приложения
 
Разбирался сегодня с сокет-серверами, в итоге получилось два полностью рабочих макета чата, один NIO - на базе xSocket, очень простой и удобный (но с фреймворком), второй - IO, с использованием только собственных функций (описание вот тут: http://www.broculos.net/tutorials/ho...er/20080320/en).

Кстати, во втором случае мне понравилось, что сразу предусматривается два сервера, один для отдачи политик, другой - рабочий. Но вопрос не в этом.

Какой из подходов IO/NIO более правилен для сокет-сервера социального приложения? Или нет разницы? Допустим, планируется до 10.000 одновременных коннектов.

И еще где-то была информация про то, что фреймворки отрицательно сказываются на быстродействии. Что по поводу xSocket?

lowka 24.04.2010 23:08

Главное отличие: в NIO (New Input/Output) есть неблокирующие сокеты, а в io их нет. И использовать последние там, где предполагается большое число пользователей/соединений, получается невозможно в принципе.

mikhailk 25.04.2010 00:07

То, что в IO нет неблокирующих сокетов, я понял и сам. :)
Вопрос был про то, как делать правильно.

maxlapshin 25.04.2010 15:51

«В интернетах» гуляют сообщения о том, что NIO в Java работает чуть ли не медленнее, чем обычный IO. Технически скорее всего обе реализации выполнены неблокирующими сокетами, что бы не вешалась джава-машина.

С точки зрения API операционной системы обслуживание 10 тыс одновременных пользователей блокирующим IO практически невозможно*— слишком велики накладные расходы на работу ниток и процессов. Однако с точки зрения виртуальной машины, где каждая нитка гораздо дешевле чем нитка ОС и весь ввод-вывод итак неблокирующий, удобнее пользоваться блокирующим вводом-выводом*— не так сильно рвется бизнес-логика.

mikhailk 25.04.2010 17:51

Я, честно говоря, не совсем понимаю, где и как она рвется.

maxlapshin 26.04.2010 01:19

При неблокирующем IO линейный код приходится распиливать на действие и коллбек ровно по операции ввода-вывода. Иначе это не неблокирующий ввод-вывод.

mikhailk 26.04.2010 11:44

Ну да, обычная событийная модель.
Весь флэш на этом стоит.

Но в целом я понял.
При блокирующем сокете у нас одна нить на одного клиента и остальные под ногами не путаются.

maxlapshin 29.04.2010 01:45

Совершенно верно. Но важно понимать, что при блокирующем сокете одна нить ОС на клиента, а это безумно дорого. Базы данных с легкостью выделяют нитку под клиента, потому что клиентов они держат очень и очень мало.

А вот для веб-сервера это неприемлемо дорого.

Dimitry_II 05.05.2010 21:22

Встретил ресурс тестирования NIO. Больше всего понравился отчет о соотношении коннектов к количеству процессов. Опытным путем пришли к выводу, что на 400-500 веб-коннектов приходится около 20 нитей процессов, то есть соотношение составляет около 1/20. Также наблюдается небольшое падение соотношения при росте коннектов.
Хочу заметить, что при 10 тыс. коннектов 500 параллельных процессов - это совсем не пиковая нагрузка.


Часовой пояс GMT +4, время: 00:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.