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
。我發佈了最少量的代碼來獲得粗糙的線程池。當然,你可能想調整和擴展這個實現來滿足你的特定需求。