3

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

然而,我的一位同事告诉我,我使用 CR 是错误的:它是为并行处理具有小上下文的轻量级任务而设计的,而不是用于从 GUI 中分离庞大且依赖 I/O 的线程。他说他从文档中获取了这个,但没有提供任何具体的链接。

那么,微软并发运行时的限制是什么,以及解决哪些问题我不应该使用它

当然 CR 不是可移植的,但让我们把它排除在外:我说的是情况,当你的代码编译时,你仍然会遇到问题。

4

2 回答 2

1

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

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

所以这里真的不是关于限制。这只是关于了解您要实现的目标,并为工作选择正确的工具。

于 2013-05-27T21:12:23.520 回答
1

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

于 2014-09-06T05:41:44.840 回答