2
我有应用程序有两个主要任务:编码,处理视频。 这些任务是独立的。 我想用可配置数量的线程运行每个任务。 由于这个原因,我通常使用ThreadPool和SetMaxThreads执行一个任务。但是现在我有两个任务,并且希望“每个任务有两个可配置(线程数量)的threapool”。 那么,ThreadPool是一个静态类。那么,我怎样才能实现我的策略(每个任务的线程容易配置)。单独的线程池为每个任务
谢谢
我有应用程序有两个主要任务:编码,处理视频。 这些任务是独立的。 我想用可配置数量的线程运行每个任务。 由于这个原因,我通常使用ThreadPool和SetMaxThreads执行一个任务。但是现在我有两个任务,并且希望“每个任务有两个可配置(线程数量)的threapool”。 那么,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
。我发布了最少量的代码来获得粗糙的线程池。当然,你可能想调整和扩展这个实现来满足你的特定需求。