【问题标题】:Using VS2010 concurrency runtime message passing classes (unbounded_buffer, etc) on non-runtime threads在非运行时线程上使用 VS2010 并发运行时消息传递类(unbounded_buffer 等)
【发布时间】:2012-06-08 14:36:28
【问题描述】:

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

【问题讨论】:

    标签: c++ visual-studio-2010 visual-c++ concurrency-runtime


    【解决方案1】:

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

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

    2. 消息不能跨越 dll 边界,因为它的分配和删除必须发生在同一个 dll 中。一些消息块(如转换器)分配新消息。所以他们也面临同样的问题。 unbounded_buffer> 非常好用,只是它不能解决上述问题。 type 模板参数是指消息中的有效负载类型(即消息)。这不是信封的类型。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多