У меня есть сервер Java, который обрабатывает входы от нескольких клиентов. Сервер создает поток для каждого слушателя сокета tcp / ip. Доступ к базе данных обрабатывается другим потоком, который создает сервер.
В настоящее время число клиентов, которых я подключаю к серверу, довольно мало (<100), поэтому у меня нет особых проблем с производительностью, но я разрабатываю, как мне следует обрабатывать больше клиентов в будущем. Меня беспокоит то, что из-за большого количества клиентов потоки моего сервера и базы данных будут зависать от постоянных вызовов их методов из потоков клиента. </p>
В частности, в отношении базы данных: в данный момент каждый клиентский поток обращается к общему потоку базы данных на своем родительском сервере и выполняет метод доступа к данным. То, что я думаю, я должен сделать, это иметь какую-то очередь сообщений, в которую клиентский поток может поместить свой запрос данных, и поток базы данных сделает это, когда получит ответ. Если есть данные, которые должны быть возвращены из вызова доступа к данным, то он может поместить их в очередь для потока клиента, чтобы забрать. Все это не затронет основной код сервера или другие потоки клиента.
Поэтому я считаю, что хочу реализовать асинхронную очередь сообщений, в которую клиентские потоки могут помещать сообщения, и поток базы данных будет получать их. Это правильный подход? Буду признателен за любые мысли и ссылки где-либо, что я могу прочитать о реализации.