比方說,我有以下的循環,應儘可能快執行的可能:
如何適當地避免在C#創建線程的開銷/重用線程
while(true)
{
A();
B();
C();
}
以下規則: B()才能開始A()完成後,C()只能在B()完成後啓動。 B()具有很高的多線程潛力。
如果我在B()內創建新的線程來分割工作,那麼與非並行解決方案相比,它會執行得更慢!
我想這是創建線程的開銷。
我創建了一個變體,其中B()的並行線程在while(true)循環之外創建。
每個線程都有一個布爾值來表示它已完成,每個線程都有一個布爾值,用於向線程表明它有新的工作要做。
螺紋和C()正在等待他們的延續與下面的代碼片斷:
while(!boolean)
Thread.Sleep(1);
當B的作業()是非常小的,這是比其它變型慢。當B()具有預期的最大工作量時,它比其他變體更快。
此布爾等待方法似乎是非常低效和愚蠢的...
threadInstance.Resume()已被棄用。
我很確定這是錯誤的方式。
我的問題的解決方案是什麼?
我聽說過線程池和任務。那我應該看看?
我避免了這些概念,因爲在閱讀這些概念時我無法很快理解它們。
請再次閱讀線程池。線程池被用來重用線程。實際上,.NET爲你準備好了一份! –
*我避免了這些概念,因爲在閱讀這些概念時我無法很快理解它們。*「我想要一個高性能的多線程應用程序,我想輕鬆完成,現在我想要它,我想要一隻小馬」 –
「I假設它是線程創建開銷。「分析比猜測更可靠。 –