gpt4 book ai didi

c++ - 接收消息频率高,请求 'best'线程模型

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

我们正计划重新设计我们软件中的框架模块。该模块从现场总线(CAN 总线)接收消息。消息量可达每秒 3000 条。单个消息相当小(8 个字节加上一个或两个 int)。驱动程序的要求是,我必须在每个 channel 至少使用一个阻塞接收函数调用。有两个或四个 channel 支持。接收消息的对象数量高达80个。现在每个对象都有自己的接收线程,这有一些缺点。一条消息可以有多个接收对象。这些对象也会被计时器触发并相互交互。

每个对象都可以在自己的线程中运行,但这不是必需的。有可能所有对象只在一个线程中运行。

编程语言是C++;操作系统是 Windows 7。我们正在使用 boost.thread,并计划使用 boost.asio。通常,我们的软件在四核 PC 上运行。

我的问题是:在多个线程上分配工作的“最佳”线程模型是什么?我们应该直接调用接收线程中的对象吗?我们应该在接收对象拥有的第二个线程中发布消息吗?我们应该使用线程组还是线程池,如果是的话怎么用?

最佳答案

I hope on some hits or tipps...

注意:这只是一个提示。

我有一个类似的问题需要解决并做了一些测试和测量。正如 Joachim Pileborg 在他的评论中提到的那样,所有模型都是可行的。正如您提到的使用 boost.asio,这是我的结果:

异步: enter image description here

同步: enter image description here

这些值是以毫秒为单位的响应时间延迟(从大约 1M 的列表中提取了大约 3000 个数据包),但不是必需的。重要的是,同步似乎更稳定。

这实际上取决于您打算做什么以及您打算做什么(例如,它是否时间紧迫,包是否必须无损),但在我的情况下,最好的选择是接收同步,每个接收器 1 个线程(6 个 channel ,其中使用,所以 6 个线程),并在一个线程中发送异步,因为实际上没有时间关键的东西。

我想尽量简短地回答,希望对您有所帮助。

关于c++ - 接收消息频率高,请求 'best'线程模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27543946/

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