并行运行任务的组实例
我想用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(政策);