在线程池的C#低线程优先级(C# lower thread priority in thread p

2019-08-19 06:10发布

我有当一些CPU时间可用来进行几个低imprtance任务。 我不希望此任务是否有其他更多的进口任务运行的执行。 也就是说,如果一个正常/高优先级任务来了,我想要的低重要性任务暂停,直到重要的任务就完成了。

还有就是要进行低重要性任务的一个相当大的数目(50至1000)。 所以我不想创建每个任务一个线程。 不过,我认为,线程池不允许一些重点规范,不是吗?

你会怎么做解决这个问题?

Answer 1:

您可以将新一个线程,并使用调度发送它需要的各种优先级 。

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



Answer 2:

你不应该乱用常规的优先级ThreadPool ,因为你不是唯一的消费者。 我想逻辑的做法是写自己的-也许就这么简单生产者/消费者队列,用你自己的Thread (S)为消费者(S) -设置自己的线程优先级。

.NET 4.0包括新库(第三方物流等),使这一切更容易 - 在那之前,你需要额外的代码来创建一个自定义线程池或工作队列。



Answer 3:

当你在使用线程池构建的所有线程使用默认优先执行。 如果你陷入困境与此设置会被忽略。 这是您应该推出自己的线程池的情况。 几年前,我扩展了SmartThreadPool满足我的需求。 这可能会满足你的为好。



Answer 4:

我想创建未决任务对象的共享队列,与每个对象指定其优先级。 然后写一个调度线程手表的队列,并启动一个新的线程为每个任务,直到某个最大线程限制,并指定线程的优先级,因为它创造它。 它的唯一工作少量做到这一点,你可以有调度员报告活动,甚至动态调整运行的线程数量。 这个概念一直很适合我,并且可以包裹在一个窗口服务启动,如果你让你的队列中的数据库表。



文章来源: C# lower thread priority in thread pool