为每个任务单独threadPool

本文关键字:单独 threadPool 任务 | 更新日期: 2023-09-27 18:03:15

我有两个主要任务的应用程序:编码,处理视频。这些任务是独立的。我想用可配置的线程数运行每个任务。出于这个原因,对于一个任务,我通常使用ThreadPool和SetMaxThreads。但是现在我有两个任务,并希望"每个任务有两个可配置的(线程数)线程池"。ThreadPool是一个静态类。那么我如何实现我的策略(每个任务的线程数易于配置)。

谢谢

为每个任务单独threadPool

您可能需要自己的线程池。如果你使用的是。net 4.0,那么如果你使用BlockingCollection类,实际上很容易自己滚动。

public class CustomThreadPool
{
  private BlockingCollection<Action> m_WorkItems = new BlockingCollection<Action>();
  public CustomThreadPool(int numberOfThreads)
  {
    for (int i = 0; i < numberOfThreads; i++)
    {
      var thread = new Thread(
        () =>
        {
          while (true)
          {
            Action action = m_WorkItems.Take();
            action();
          }
        });
      thread.IsBackground = true;
      thread.Start();
    }
  }
  public void QueueUserWorkItem(Action action)
  {
    m_WorkItems.Add(action);
  }
}

这就是它的全部内容。您将为要控制的每个实际池创建一个CustomThreadPool。我发布了最少数量的代码来运行一个粗略的线程池。当然,您可能希望调整和扩展此实现以满足您的特定需求。