【发布时间】:2014-12-18 10:05:39
【问题描述】:
我们正计划在我们的软件中重新设计一个框架模块。该模块从现场总线(CAN 总线)接收消息。消息量可高达每秒 3000 条。单个消息相当小(8 字节加一或两个 int)。 驱动程序的要求是,我必须在每个通道中至少使用一个阻塞接收函数调用。有两个或四个通道可以支持。 接收消息的对象数量多达80个。今天每个对象都有自己的接收线程,这有一些缺点。一条消息可以有多个接收对象。 对象也将由计时器触发并相互交互。
每个对象都可以在自己的线程中运行,但这不是必需的。有可能所有对象只在一个线程中运行。
编程语言是C++;操作系统是 Windows 7。我们正在使用 boost.thread 并计划使用 boost.asio。一般来说,我们的软件在四核 PC 上运行。
我的问题是:在多个线程上分配工作的“最佳”线程模型是什么? 我们应该直接调用接收线程中的对象吗?我们应该在接收对象拥有的第二个线程中发布消息吗?如果是,我们应该使用线程组还是池?
【问题讨论】:
-
你所有的“模型”都是可行的。我建议您使用所有这些设置测试,看看哪些最适合您的系统(不仅在吞吐量方面,而且还包括它如何与系统的其余部分集成,以及可能的其他考虑因素)。
-
好建议,但这会导致一些额外的工作。我希望有一些点击或提示,或者其他人的一些经验。什么是我必须看的东西?
标签: c++ windows multithreading boost-asio