【问题标题】:Is prioritization of tasks in Threadpool possible in .NET?在 .NET 中是否可以对线程池中的任务进行优先级排序?
【发布时间】:2017-01-09 19:21:14
【问题描述】:

在 .NET 中是否可以对线程池中的任务进行优先级排序?

我有一个列表……很多……Actions。我想在线程池中运行它们..但是。 我想要做的是设置线程池,所以它是这样工作的:

  1. 为第一个操作/任务赋予最高优先级 - 只关注第一个任务。
  2. 其余任务的优先级最低。
  3. 当第一个任务完成后,为第二个任务设置最高优先级。
  4. 当第二个任务完成后,将最高优先级设置为第三个任务,依此类推。

这就像你想从种子下载整个电视节目季(我不推荐)并尽快开始观看。

我可以设置这样的线程池吗?或者有没有比线程池更好的解决方案?

我尝试了很多解决方案,但一切都“过于手动”。比如,在ThreadPool 旁边运行单独的Task.Factory.StartNew 线程。或者仅通过Task.Factory.StartNew 运行线程。

编辑: 好的,看看这里的第一条评论,也许我还不够清楚。我的单个任务/动作是多线程的。它需要3-4个线程。在同步队列中运行 100,000 个这样的任务是没有意义的,因为当时我将只使用 3-4 个线程。我正在尝试的是: (好吧,假设我们有一个队列)队列中的第一个任务得到它想要的一切(最多 4 个线程,对吗?)...我仍然有 4 个空闲线程(或更多,取决于机器)。我不想浪费它们,所以我想在那里运行其他任务......这很疯狂吗?

EDIT2: 现在我只使用一个线程池。这真的很糟糕。我有 8 个核心 CPU。我开始 40 个任务只是为了测试。它一次计算近 40 个......意思是,对于第一个结果,我需要等待 10 分钟(它是 30 秒/任务运行同步)

【问题讨论】:

  • 所以你想获得一堆线程并让它们在队列中同步而不是异步运行(这就是使用线程的原因)?
  • 例如:如果你有 8 个线程。我希望第一个任务在 4 个线程上运行,并在剩余的 4 个线程上运行 100,000 个剩余任务。当第一个完成时,第二个获得最高优先级。
  • 听起来你只想将HPC 用于本地线程。一旦线程启动,我就无法调整优先级。事实上,使用 HPC 或 Hadoop,一旦 CPU 最初抓取它们,您就无法更改它们的数量。如果你暂停除前 4 个线程之外的所有线程,当一个线程完成时,你可以让另一个线程恢复
  • 我明白了:您的所有任务都需要 3 - 4 个线程吗?如果是这样,您可以排队并一次将他们踢出两个。 Parallel.ForEach 在这里也可能是一个选项,但这并不能保证它将使用多少线程。
  • @EJoshuaS 因此,任务需要的线程数和可用线程数是变量。我你的机器上有 4 个线程,任务需要 8 个,然后它将运行同步。最重要的是第一个/下一个任务,其余的只有在有资源(线程)未使用时才应该运行。

标签: c# .net multithreading performance threadpool


【解决方案1】:

将剩余的 4 个线程分配给 100,000 个任务似乎效率低下,尤其是因为一旦第一个任务完成,您就想赶第二个任务。你为什么不做点别的——为第一个任务分配 4 个线程,为第二个任务分配 4 个线程,依此类推,直到你的 CPU 用完。完成其中一项任务后,为队列中的下一项分配线程。

【讨论】:

    【解决方案2】:

    线程池是专门为回收线程而设计的,因此改变优先级会干扰这一理念。

    但是,在处理任务时,您可以通过在自定义 TaskScheduler 中创建一个显式线程来完成此操作

    Windows 支持七种相对线程优先级:空闲、最低、低于正常、正常、高于正常、最高和时间关键。

    高级方法 -

    1. 通过扩展TaskScheduler 创建自定义TaskScheduler
    2. 这里的关键点是TaskScheduler 将使用一个单独的线程(具有您想要的优先级)来处理排队的任务
    3. Task.Factory.StartNew 将使用此自定义 TaskScheduler 来执行任务。

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      • 2016-09-13
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多