并行运行任务的组实例

我想用ppl中的task_group类替换普通线程的使用,但是我遇到了以下问题:

  • 我有一个带有task_group成员的A类,

  • 创建2个不同的A类实例,

  • 在第一个A实例的task_group中启动一个任务(使用run),

  • 几秒钟后在第二个A实例的task_group中启动任务。

  • 我期望两个任务并行运行,但第二个任务等待第一个任务完成,然后开始。

    这只发生在我的应用程序中,任务是从静态函数开始的。 我在测试应用程序中执行了相同的场景,并且这些任务正在并行运行。

    花了几个小时试图弄清楚,我切换回正常的线程。

    有谁知道为什么并发运行时发生这种行为,或者我该如何避免这种情况?

    编辑问题是它运行在单个核心CPU上,并发运行时查看吞吐量。 我想知道微软的并行模式库是否具有活动对象的概念,或者是线上的东西,这样你就可以指定你将要吃午饭的任务将与你开始的线程并行执行......


    响应可以在这里找到:http://social.msdn.microsoft.com/Forums/en/parallelcppnative/thread/85a84373-4c3d-4862-bff3-9a21ffe82493

    对于一台核心机器来说,这是预期的“默认”行为。 这可以改变。

    默认情况下,可以并行运行的任务数量=硬件线程数量(核心数量)。 这提高了完成任务的原始效率和效率。

    但是,有很多情况下开发人员会希望并行运行多个任务,而不管内核的数量是多少。 在这种情况下,你有两个选择:

  • 本地超配。
  • 在你的例子中,你会使用

    void lengthyTask()
    
    {
    
        Context::Oversubscribe(true)
    
             ...do a lengthy task  (//OR a blocking task)
    
        Context::Oversubscribe(false)
    
    }
    
  • 当您启动应用程序时,过度调度程序。

    SchedulerPolicy策略(1,MaxConcurrency,GetProcessorCount()* 2);

    SetDefaultSchedulerPolicy(政策);

  • 链接地址: http://www.djcxy.com/p/35387.html

    上一篇: group instances not running tasks in parallel

    下一篇: java run services in parallel on the server