我是一個C#程序員,我遇到了一些線程問題。c#多樣化線程
資產是實體的,我需要運行的每個平行的資產,並運行的方法「doSomethingOnAsset」
我有一個有100個線程的程序(即每資產我做一些關於它的操作1線) 。通常,每個線程在運行的每個內部元素上都有相同的時間框架,並且每個線程都調用「doSomethingOnAsset」方法。
每個線程間隔運行10毫秒(即)。
我不想要那麼多的線程,所以我爲每個資產創建了一個隊列,但是在調用中心方法「doSomethingOnAsset」時 - 線程沒有以相同的時間間隔運行。
即第一個線程運行間隔週期爲300毫秒。 第二個線程運行間隔週期爲700毫秒。 第三個線程運行間隔週期爲2秒。 ...
什麼是運行一個預定義的方法並行的100倍的最佳方式(並行條目可能是外部服務,在運行時,觸發運行我的「doSomethingOnAsset」的代碼的事件。
public void doSomethingOnAsset(object obj)
{
// infinite loop when thread.
while (true)
{
doSomething(obj);
Thread.Sleep(100);
}
}
public void doSomething(object obj)
{
// do something.
}
public void Run()
{
Thread t;
for (int i = 0; i < 100; i++)
{
t = new Thread(new ParameterizedThreadStart(this.doSomethingOnAsset));
t.Start(new object());
}
Console.ReadLine();
}
或致電事件信號,DoSomething的,當外部程序觸發。
謝謝:)
邊注。爲什麼不'Parallel.For(...)'?明確創建'100'線程並不是一個好設計。例如:'Parallel.For(0,100,i => doSomethingOnAsset(i));' –
既可以使用'Parallel.For'或者使用線程池或任務對它們進行排隊,則應該自動處理並行性。 –
你有100個核心嗎?這聽起來不像是一個優化吞吐量的好計劃。 – spender