如何正确避免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()已弃用。

无论如何,我确信这是错误的方式
我的问题的正确解决方案是什么
我听说过线程池和任务。这是我应该调查的吗
我避开了那些概念,因为在阅读这些概念时,我不能很快理解它们。

任务。阅读任务。

在b中的所有任务之后的一个任务,当它们完成时,后面跟着C。

您试图用Task API解决很久以前解决的问题(我认为是在.NET 4.0时间框架内)。

正如@TomTom所说,任务API是正确的选择。

任务API是在中引入的。NET 4.0中进行了改进。净4.5。对于以前的。NET版本的异步编程模型(APM)将是正确的方法。

最新更新