5

当一些 cpu 时间可用时,我有几个低重要性的任务要执行。如果其他更多导入任务正在运行,我不希望执行此任务。即,如果一个正常/高优先级任务来了,我希望低重要性任务暂停,直到重要性任务完成。

有相当多的低重要性任务需要执行(50 到 1000)。所以我不想为每个任务创建一个线程。但是我相信线程池不允许某些优先级规范,不是吗?

你会怎么解决这个问题?

4

4 回答 4

2

您可以新建一个 Thread 并使用Dispatcher发送它需要各种优先级

优先级有点以 UI 为中心,但这并不重要。

于 2009-10-16T15:01:20.017 回答
2

你不应该弄乱常规 ThreadPool的优先级,因为你不是唯一的消费者。我想合乎逻辑的方法是编写你自己的 - 可能就像生产者/消费者队列一样简单,使用你自己Thread的作为消费者 - 自己设置线程优先级。

.NET 4.0 包含新的库(TPL 等)以使这一切变得更容易——在此之前,您需要额外的代码来创建自定义线程池或工作队列。

于 2009-10-16T15:02:35.723 回答
2

当您在 ThreadPool 中使用构建时,所有线程都以默认优先级执行。如果你弄乱了这个设置,它将被忽略。在这种情况下,您应该滚动自己的 ThreadPool。几年前,我扩展了SmartThreadPool以满足我的需求。这也可能满足您的需求。

于 2009-10-16T15:11:03.377 回答
0

我会创建一个挂起任务对象的共享队列,每个对象都指定其优先级。然后编写一个调度线程来监视队列并为每个任务启动一个新线程,直到某个最大线程限制,并在创建线程时指定线程优先级。只需少量工作即可做到这一点,您可以让调度程序报告活动,甚至动态调整正在运行的线程数。这个概念对我来说非常有效,如果你将队列设置为数据库表,可以将其包装在 Windows 服务中以启动。

于 2009-10-22T22:23:25.350 回答