使用 VS2010 并发运行时消息在非运行时线程上传递类(unbounded_buffer 等)



我喜欢unbounded_buffer的便利性,但我也想在并发运行时一无所知的线程上使用这个类。在我的测试中,它似乎工作正常。这种方法有什么潜在的问题吗?

这是我从MSFT收到的关于这个问题的信息:

  1. 是的,您可以使用通过 CreateThread 手动创建的线程上的消息块(如 unbounded_buffer)。

  2. 邮件不能遍历 dll 边界,因为其分配和删除必须在同一 dll 中进行。某些消息块(如转换器)会分配新消息。所以他们也遇到了同样的问题。unbounded_buffer>完全可以使用,但它不能解决上述问题。类型模板参数引用消息(即消息)中的有效负载类型。它不是信封的类型。

  3. 在稳定状态下,数据流网络的吞吐量非常好。性能损失的主要来源是设置网络时消息块的链接和取消链接。在 Visual Studio 2010 中,消息启动命令(如 send 和 asend )遭受了这种性能损失。我们已经在即将发布的Visual Studio版本中解决了这个问题。没有计划将修复程序向后移植到 VS2010。一种可能的解决方法是实现始终连接到数据流网络的简单 ISource 消息块。使用此块将消息发起到网络中(agents.h 中的_Originator是 ISource 块的示例)。

最新更新