MS Concurrency Runtime有哪些限制?

时间:2012-11-28 05:16:47

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

我在Visual Studio 2010中使用一个简单的并发运行时task_group来运行一个工作线程来将工作与GUI线程分开。

然而,我的一位同事告诉我,我错误地使用了CR:它设计用于并行化具有小上下文的轻量级任务,而不是用于从GUI中分离笨重和I / O相关的线程。他说他从文档中删除了这个,但没有提供任何具体的链接。

那么, Microsoft并发运行时有哪些限制并解决我不应该使用它的问题

当然CR不是便携式的,但是请不要理会:我在谈论情况时,编码时会编译,但是你会遇到问题。

2 个答案:

答案 0 :(得分:1)

并发运行时是一种协作调度基础结构。如果您不打算利用协作调度,那么您最好在需要时创建线程,并让操作系统负责调度。

如果 进入协作调度,那么等待IO操作完成是没有意义的,因为你阻塞了一个原本可以用来运行其他任务的线程,不要依赖这个IO操作来完成。如果其他任务依赖于要完成的IO任务,您可以简单地使它们继续,并且ConcRT调度程序将确保在它们到来时运行它们。

所以这真的不是限制在这里。它只是知道你想要实现的目标,并为工作选择合适的工具。

答案 1 :(得分:1)

正如Yam所说,并发运行时不提供并行执行保证,它只是潜在的可能性,这就是任务和线程概念之间的区别。如果你的任务正确(不是太精细,不能花太多时间在任务之间切换,也不是太粗糙,不能总是为所有核心做一些工作 - 在你的情况下 - 只有一个),那么开销就不会很大,您的程序将准备好在多核或多处理器平台上运行,以及未来的证据"正如MSFT的人所说。