Asyn c обработка запросов в Facebook Proxygen - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть блокировка чтения базы данных, запись в функции 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 секунд. Вы получаете это ...

Как я могу обработать каждый запрос асинхронно ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...