![]() |
Поясните разницу IO/NIO (socket-сервер на java) для социального приложения
Разбирался сегодня с сокет-серверами, в итоге получилось два полностью рабочих макета чата, один NIO - на базе xSocket, очень простой и удобный (но с фреймворком), второй - IO, с использованием только собственных функций (описание вот тут: http://www.broculos.net/tutorials/ho...er/20080320/en).
Кстати, во втором случае мне понравилось, что сразу предусматривается два сервера, один для отдачи политик, другой - рабочий. Но вопрос не в этом. Какой из подходов IO/NIO более правилен для сокет-сервера социального приложения? Или нет разницы? Допустим, планируется до 10.000 одновременных коннектов. И еще где-то была информация про то, что фреймворки отрицательно сказываются на быстродействии. Что по поводу xSocket? |
Главное отличие: в NIO (New Input/Output) есть неблокирующие сокеты, а в io их нет. И использовать последние там, где предполагается большое число пользователей/соединений, получается невозможно в принципе.
|
То, что в IO нет неблокирующих сокетов, я понял и сам. :)
Вопрос был про то, как делать правильно. |
«В интернетах» гуляют сообщения о том, что NIO в Java работает чуть ли не медленнее, чем обычный IO. Технически скорее всего обе реализации выполнены неблокирующими сокетами, что бы не вешалась джава-машина.
С точки зрения API операционной системы обслуживание 10 тыс одновременных пользователей блокирующим IO практически невозможно*— слишком велики накладные расходы на работу ниток и процессов. Однако с точки зрения виртуальной машины, где каждая нитка гораздо дешевле чем нитка ОС и весь ввод-вывод итак неблокирующий, удобнее пользоваться блокирующим вводом-выводом*— не так сильно рвется бизнес-логика. |
Я, честно говоря, не совсем понимаю, где и как она рвется.
|
При неблокирующем IO линейный код приходится распиливать на действие и коллбек ровно по операции ввода-вывода. Иначе это не неблокирующий ввод-вывод.
|
Ну да, обычная событийная модель.
Весь флэш на этом стоит. Но в целом я понял. При блокирующем сокете у нас одна нить на одного клиента и остальные под ногами не путаются. |
Совершенно верно. Но важно понимать, что при блокирующем сокете одна нить ОС на клиента, а это безумно дорого. Базы данных с легкостью выделяют нитку под клиента, потому что клиентов они держат очень и очень мало.
А вот для веб-сервера это неприемлемо дорого. |
Встретил ресурс тестирования 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
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.