|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Поясните разницу IO/NIO (socket-сервер на java) для социального приложения
Разбирался сегодня с сокет-серверами, в итоге получилось два полностью рабочих макета чата, один NIO - на базе xSocket, очень простой и удобный (но с фреймворком), второй - IO, с использованием только собственных функций (описание вот тут: http://www.broculos.net/tutorials/ho...er/20080320/en).
Кстати, во втором случае мне понравилось, что сразу предусматривается два сервера, один для отдачи политик, другой - рабочий. Но вопрос не в этом. Какой из подходов IO/NIO более правилен для сокет-сервера социального приложения? Или нет разницы? Допустим, планируется до 10.000 одновременных коннектов. И еще где-то была информация про то, что фреймворки отрицательно сказываются на быстродействии. Что по поводу xSocket? |
|
|||||
Регистрация: Sep 2006
Сообщений: 256
|
Главное отличие: в NIO (New Input/Output) есть неблокирующие сокеты, а в io их нет. И использовать последние там, где предполагается большое число пользователей/соединений, получается невозможно в принципе.
__________________
:emocry: |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
То, что в IO нет неблокирующих сокетов, я понял и сам.
Вопрос был про то, как делать правильно. |
|
|||||
Erlyvideo
|
«В интернетах» гуляют сообщения о том, что NIO в Java работает чуть ли не медленнее, чем обычный IO. Технически скорее всего обе реализации выполнены неблокирующими сокетами, что бы не вешалась джава-машина.
С точки зрения API операционной системы обслуживание 10 тыс одновременных пользователей блокирующим IO практически невозможно*— слишком велики накладные расходы на работу ниток и процессов. Однако с точки зрения виртуальной машины, где каждая нитка гораздо дешевле чем нитка ОС и весь ввод-вывод итак неблокирующий, удобнее пользоваться блокирующим вводом-выводом*— не так сильно рвется бизнес-логика. |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Я, честно говоря, не совсем понимаю, где и как она рвется.
|
|
|||||
Erlyvideo
|
При неблокирующем IO линейный код приходится распиливать на действие и коллбек ровно по операции ввода-вывода. Иначе это не неблокирующий ввод-вывод.
|
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Ну да, обычная событийная модель.
Весь флэш на этом стоит. Но в целом я понял. При блокирующем сокете у нас одна нить на одного клиента и остальные под ногами не путаются. |
|
|||||
Erlyvideo
|
Совершенно верно. Но важно понимать, что при блокирующем сокете одна нить ОС на клиента, а это безумно дорого. Базы данных с легкостью выделяют нитку под клиента, потому что клиентов они держат очень и очень мало.
А вот для веб-сервера это неприемлемо дорого. |
|
|||||
Регистрация: Jan 2010
Сообщений: 211
|
Встретил ресурс тестирования NIO. Больше всего понравился отчет о соотношении коннектов к количеству процессов. Опытным путем пришли к выводу, что на 400-500 веб-коннектов приходится около 20 нитей процессов, то есть соотношение составляет около 1/20. Также наблюдается небольшое падение соотношения при росте коннектов.
Хочу заметить, что при 10 тыс. коннектов 500 параллельных процессов - это совсем не пиковая нагрузка. |
Часовой пояс GMT +4, время: 02:13. |
|
« Предыдущая тема | Следующая тема » |
|
|