开发者

Separate threadPool for each task

I've got application which has two main task: encoding, processing video. These tasks are independant. Each task I would like run with configurable number of threads. For this reason for one task I usually use ThreadPool and SetMaxThreads. But now I've got two tasks and would like "two configurable(number of threads) threapool fo开发者_运维知识库r each task". Well, ThreadPool is a static class. So how can I implement my strategy(easy configurable number of threads for each task).

Thanks


You will probably want your own thread pool. If you are using .NET 4.0 then it is actually fairly easy to roll your own if you use the BlockingCollection class.

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);
  }
}

That is really all there is to it. You would create a CustomThreadPool for each actual pool you want to control. I posted the minimum amount of code to get a crude thread pool going. Naturally, you might want to tweak and expand this implementation to suit your specific need.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜