У меня есть таблица базы данных requests_pending
, которая содержит запросы (сообщения) от пользователя, подлежащего обработке. Скорость входящего запроса составляет 1000/секунду. После обработки запроса он удаляется из таблицы requests_pending
и вставлен в requests_processed
. И ответ для каждого запроса вставляется в таблицу response
, которая затем отправляется пользователю. Чтобы не отставать от входящих запросов, я попытался использовать несколько потоков для извлечения и обработки запроса. Я использовал synchronized
BLOCK на выборке запроса, чтобы только один поток обращался к таблице за раз и, следовательно, избегал дублирования обработки запросов.Многопоточность для повышения производительности
synchronized (this) {
fetch request...
}
processRequest();
Но synchronized
блок замедляет работу приложения. Один Thread
работает лучше, чем несколько Threads
, я думаю, потому что накладные расходы отсутствуют. Любой альтернативный подход для повышения производительности.
Похоже, вы переопределяете JMS. Поэтому, возможно, * используйте * реализацию JMS. –
Вы открываете/закрываете соединение по каждому запросу? это также замедляет его. –
@BartHofma Я использую пул соединений. – Abhay