gpt4 book ai didi

c# - .NET 中是否可以对 Threadpool 中的任务进行优先级排序?

转载 作者:行者123 更新时间:2023-12-05 06:41:51 27 4
gpt4 key购买 nike

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

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

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

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

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

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

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

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

最佳答案

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

但是,在处理任务时,您可以通过在自定义 TaskScheduler

中创建一个显式线程来实现

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

高级方法-

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

关于c# - .NET 中是否可以对 Threadpool 中的任务进行优先级排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com