【发布时间】:2016-07-24 11:37:48
【问题描述】:
我正在设计一个高度可扩展的应用程序。它将有许多处理节点,从一个公共队列中获取任务并处理它们。
我的想法是在每个节点中都有一个线程从任务队列中读取并启动一个任务来完成工作。
我的问题是如何限制每个节点中排队的任务的数量,因为它只取决于创建任务的线程的速度,而不是节点的当前负载。 如何知道 ThreadPool 中排队的项目数? 如何公平分配任务?
感谢您的宝贵时间。
【问题讨论】:
-
看看this
-
“处理节点”是什么意思?如果它们只是单个共享内存系统中的处理器,那么您应该依赖任务并行库的默认调度程序,它会为您处理所有这些问题。
-
只需使用 Semaphore/Slim。在开始任务之前调用 Wait(),在任务完成时调用 Release()。您允许多少未完成的任务在构造函数中指定。
标签: c# .net multithreading threadpool scalability