【问题标题】:How to know the number of queued items in the ThreadPool backlog [duplicate]如何知道线程池积压中的排队项目数[重复]
【发布时间】:2016-07-24 11:37:48
【问题描述】:

我正在设计一个高度可扩展的应用程序。它将有许多处理节点,从一个公共队列中获取任务并处理它们。

我的想法是在每个节点中都有一个线程从任务队列中读取并启动一个任务来完成工作。

我的问题是如何限制每个节点中排队的任务的数量,因为它只取决于创建任务的线程的速度,而不是节点的当前负载。 如何知道 ThreadPool 中排队的项目数? 如何公平分配任务?

感谢您的宝贵时间。

【问题讨论】:

  • 看看this
  • “处理节点”是什么意思?如果它们只是单个共享内存系统中的处理器,那么您应该依赖任务并行库的默认调度程序,它会为您处理所有这些问题。
  • 只需使用 Semaphore/Slim。在开始任务之前调用 Wait(),在任务完成时调用 Release()。您允许多少未完成的任务在构造函数中指定。

标签: c# .net multithreading threadpool scalability


【解决方案1】:

每个从公共队列创建的任务在开始时都应该互锁。增加变量QueuedTaskCount,每个任务在开始时应该互锁。减少相同的变量。变量 QueuedTaskCount 现在包含排队任务的数量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    相关资源
    最近更新 更多