C#线程池中的线程优先级较低

时间:2009-10-16 14:58:13

标签: c# multithreading threadpool

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

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

你会如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

您可以新建一个主题并使用Dispatcher发送various priorities

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

答案 1 :(得分:2)

您不应该忽略常规 ThreadPool的优先级,因为您不是唯一的消费者。我认为逻辑方法是编写自己的 - 可能像生产者/消费者队列一样简单,使用您自己的Thread(s)作为消费者 - 自己设置线程优先级。

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

我创建了一个待处理任务对象的共享队列,每个对象指定其优先级。然后编写一个调度程序线程,该线程监视Queue并为每个任务启动一个新线程,最多达到一些最大线程限制,并在创建它时指定线程优先级。它只做了少量的工作,你可以拥有调度程序报告活动,甚至可以动态调整运行线程的数量。这个概念对我来说非常有效,如果你把你的队列作为数据库表,它可以包装在windows服务中来启动。