У меня есть блокировка чтения базы данных, запись в функции onEOM
. Я хочу сделать это асинхронно для всех запросов. Для имитации блокировки ввода-вывода я использовал функцию usleep. Моя onEOM
функция:
void RequestHandler::onEOM() noexcept
{
folly::IOThreadPoolExecutor executor(12);
executor.add([=] {
usleep(5000000); // sleep for 5 seconds
ResponseBuilder(downstream_)
...
.sendWithEOM();
});
}
Мой процессор имеет 12 потоков, поэтому я передаю 12 в IOThreadPoolExecutor
ctor. Когда я отправляю 24 одновременных запроса, через 5 секунд я получаю 12 ответов от своего сервера, затем после получения первых ответов, через 5 секунд я получаю оставшиеся 12 ответов. Я должен ждать 10 секунд для последних 12 запросов, хотя я должен получить ответы через 5 секунд. Последние 12 запросов ждут первые 12 запросов до конца sh. Если у меня 36 одновременных запросов, я получу ответы на последние 12 запросов через 15 секунд. Вы получаете это ...
Как я могу обработать каждый запрос асинхронно ?