【问题标题】:Task Parallel Library - Blocking Operations?任务并行库 - 阻塞操作?
【发布时间】:2012-03-16 11:13:42
【问题描述】:

.NET 任务并行库如何处理具有阻塞操作的任务?在 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.

}

【问题讨论】:

    标签: c# .net task-parallel-library


    【解决方案1】:

    TPL 使用爬山算法来找到最佳线程数,而无需任务本身的合作。它只是不断注入线程,直到任务完成率没有进一步提高。

    【讨论】:

    • ThreadPool(由 TPL 在幕后使用)也会收到通知,告知其其中一个线程开始阻塞,并使用此信息来决定何时创建新线程。
    • svick,很好的评论。我也认为这是真的,尽管没有记录。我现在似乎找不到这方面的参考资料。
    • 我不知道它是否真的是文档,但我的来源是 CLR via C#,第 3 版,第 759 页:“但是,如果这些线程中的任何一个自愿阻止 [ ...] 然后 Windows 通知线程池它的一个线程已停止运行。线程池现在 [...] 创建一个新线程来替换被阻塞的线程。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2013-03-22
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多