Как в программе сервере на JAVA лучше реализовать многопоточность?
Здравствуйте! Пытаюсь написать 1 сервер на Java. Сервер для мобильного приложения, сервер должен принимать JSON запрос обрабатывать производить поиск по базе данных, формировать и отправлять JSON ответ. Суть вопроса в том что я хочу понять как на подобном сервере можно реализовать одновременную работу скажем свыше 1000 - 10 ...000 человек? Если можно с примерами.(Под сервером понимается программа которая может находиться не на одной станции). Получается 1 поток будет содержать такой функционал как: прием JSON, расшифровка, поиск по базе, формирование ответа и его отсылка. И на каждого пользователя 1 такой поток?
Посмотрите лучше на D. В плане идиоматики он почти как Java, но при этом не требует JVM и поддерживает файберы т.е. в Java вы упретесь в количество потоков очень быстро. Чисто теоретически на Java есть зеленые нити, но это не совсем то что нужно.
Никак!
Чтобы реализовать конкурентные запросы от 100 000 и далее, стоит смотреть не язык программирования, а архитектурные паттерны, парадигмы.
На одной инстанции, столько "не вывезет" не один язык. А что если он (сервер) "упал"?
Артур:
Не совсем. Количество открытых потоков это не критерий загруженности, так как при каждом запросе должен откываться поток.
Но запросы разные по их натуре и затратам. Поэтому простой наивный вариант, это https://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%BB%D...
Один вход а вот обработчиков (серверов) Н-ое кол-во. Для такого сценария, должны быть продуманны многие моменты. Самый главый это отсутсвие стейта в запросе.
Многое зависит от "обработки и поиска". Если у вас эта процедура быстрая и не требовательная к памяти, то 1000 запросов в секунду Spring MVC прожуёт и без дополнительных манипуляций. А вот если обработка одного запроса долгая или запросов 10 000, то появляется проблема C10k. С этим вам поможет только асинхронный сервер. Или кластер серверов с балансировкой нагрузки.