任务并行库 - 阻塞操作?

3
.NET Task Parallel Library如何处理具有阻塞操作的任务?在C++ Concrt库中,您可以使用Context :: Oversubscribe方法,但我没有在.NET库中找到这样的东西?是否LongRunningTask选项是处理阻塞任务的相应方式?
即:在C++中,您将执行以下操作:
auto my_task_func = []
{
     //Do work...
     Context::Oversubscribe(true);
     // Short or long blocking op.
     Context::Oversubscribe(false);
     //Do more work.

}
1个回答

3
TPL使用爬山算法来找到最佳线程数量,而不需要任务本身的协作。它会持续注入线程,直到任务完成率不能进一步提高为止。

1
ThreadPool(由TPL在后台使用)还会接收到其线程开始阻塞的通知,并使用此信息来决定何时创建新线程。 - svick
svick,好评论。我也认为这是正确的,尽管没有记录。我现在似乎找不到相关的参考资料。 - usr
2
我不确定这是否是官方文档,但我的来源是《CLR via C#》第三版,第759页:“然而,如果其中任何一个线程自愿阻塞[...],那么Windows会通知线程池其中一个线程已停止运行。线程池现在[...]创建一个新线程来替换被阻塞的线程。” - svick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接