繁体   English   中英

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

[英]C# lower thread priority in thread pool

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

有很多低重要性任务要执行(50到1000)。 因此,我不想为每个任务创建一个线程。 但是我相信线程池不允许某些优先级指定,不是吗?

您将如何解决呢?

您可以新建一个线程,然后使用分派器发送具有各种优先级的线程。

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

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

.NET 4.0包括新的库(TPL等),以使所有这些操作变得更容易-在此之前,您需要其他代码来创建自定义线程池或工作队列。

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

我将创建一个暂挂任务对象的共享队列,每个对象都指定其优先级。 然后编写一个调度程序线程,该线程监视队列并为每个任务启动一个新线程,直到某个最大线程限制,并在创建线程时指定线程优先级。 这样做仅需少量工作,并且您可以使调度程序报告活动,甚至可以动态调整正在运行的线程数。 这个概念对我来说效果很好,如果将队列设为数据库表,则可以包装在Windows服务中以进行引导。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM