我有当一些CPU时间可用来进行几个低imprtance任务。 我不希望此任务是否有其他更多的进口任务运行的执行。 也就是说,如果一个正常/高优先级任务来了,我想要的低重要性任务暂停,直到重要的任务就完成了。
还有就是要进行低重要性任务的一个相当大的数目(50至1000)。 所以我不想创建每个任务一个线程。 不过,我认为,线程池不允许一些重点规范,不是吗?
你会怎么做解决这个问题?
我有当一些CPU时间可用来进行几个低imprtance任务。 我不希望此任务是否有其他更多的进口任务运行的执行。 也就是说,如果一个正常/高优先级任务来了,我想要的低重要性任务暂停,直到重要的任务就完成了。
还有就是要进行低重要性任务的一个相当大的数目(50至1000)。 所以我不想创建每个任务一个线程。 不过,我认为,线程池不允许一些重点规范,不是吗?
你会怎么做解决这个问题?
您可以将新一个线程,并使用调度发送它需要的各种优先级 。
优先级是有点UI为中心但这并不重要。
你不应该乱用常规的优先级ThreadPool
,因为你不是唯一的消费者。 我想逻辑的做法是写自己的-也许就这么简单生产者/消费者队列,用你自己的Thread
(S)为消费者(S) -设置自己的线程优先级。
.NET 4.0包括新库(第三方物流等),使这一切更容易 - 在那之前,你需要额外的代码来创建一个自定义线程池或工作队列。
当你在使用线程池构建的所有线程使用默认优先执行。 如果你陷入困境与此设置会被忽略。 这是您应该推出自己的线程池的情况。 几年前,我扩展了SmartThreadPool满足我的需求。 这可能会满足你的为好。
我想创建未决任务对象的共享队列,与每个对象指定其优先级。 然后写一个调度线程手表的队列,并启动一个新的线程为每个任务,直到某个最大线程限制,并指定线程的优先级,因为它创造它。 它的唯一工作少量做到这一点,你可以有调度员报告活动,甚至动态调整运行的线程数量。 这个概念一直很适合我,并且可以包裹在一个窗口服务启动,如果你让你的队列中的数据库表。