gpt4 book ai didi

c++ - 产量 boost::asio::coroutine 直到任务完成

转载 作者:太空宇宙 更新时间:2023-11-04 13:07:11 29 4
gpt4 key购买 nike

我正在构建一个简单的 C++ 服务器,我在其中通过 POST 请求接收图像,将其发送到 GPU 进行处理,一旦我从 GPU 获得结果,就发回响应。

为了能够处理许多同时连接(并学习新的东西),我正在使用 Boost::asio,遵循使用 boost::asio::coroutine 的 server4 示例(link)。我遇到的问题是如何在不阻塞协程的情况下将数据从协程发送到 GPU。

当 GPU 可以同时处理一批请求时,它的效率最高。但即使一次处理一个请求(不能进行上下文切换,因为 CPU 和内存 IO 是瓶颈),它也必须在处理下一个请求之前处理一个完整的请求。这意味着我需要对协程的请求进行排队,并在 GPU 处理完成时以某种方式向协程发出信号。

一直在查看 boost::asio 引用资料,但没有任何内容跳出来。一般来说,如何在无法立即生成响应(例如可能需要 ~500 毫秒)的情况下使用 boost asio 协程。这通常是如何完成的?

最佳答案

设置与 GPU 交互的程序部分在它自己的线程上运行。当您收到需要 GPU 的请求时,将图像数据与套接字对象和其他所需参数一起装箱,并将其插入(可能是互斥锁定的)队列。然后 gpu 线程可以从队列中拉出,执行其工作,然后在 io_service 上生成一个新任务以使用结构中存储的信息完成与客户端的事务。

可以使用 condition variable 将 GPU 线程设置为 sleep ,直到工作可用为止并让网络代码在推送工作请求后调用 notify_one()。

关于c++ - 产量 boost::asio::coroutine 直到任务完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41665337/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com