Я строю простой сервер C++, где я получаю изображение через запрос POST, отправляю его на графический процессор для обработки, и как только у меня есть результаты с графического процессора, отправьте ответ.Усиление boost :: asio :: coroutine до завершения задачи
Чтобы иметь возможность обрабатывать множество одновременных подключений (и чтобы узнать что-то новое), я использую Boost :: asio, следуя примеру server4 (link), который использует boost :: asio :: coroutine. Проблема, с которой я сталкиваюсь, заключается в том, как отправлять данные из сопрограммы на графический процессор, не блокируя сопрограмму.
GPU является наиболее эффективным, когда он может обрабатывать пакет запросов вместе. Но даже обработка одного запроса по времени (не может быть переключена в контекст как CPU и память IO является узким местом), он должен обработать полный запрос, прежде чем начинать с следующего. Это означает, что мне нужно очереди запросов от сопрограмм и как-то сигнализировать сопрограмму, когда обработка GPU завершена.
Посмотрел через boost :: asio reference, но ничего не выпрыгивает на меня. В общем, как следует форматировать asio сопрограммы, когда ответ не может быть сгенерирован немедленно (например, может потребоваться ~ 500 мс). Как это обычно делается?
Является ли это для stackful или Stackless сопрограммам? –
Это для асинхронных операций. Каким бы способом вы их не отправляли/не заполняли. – sehe