【发布时间】:2014-02-16 22:10:56
【问题描述】:
假设我有以下应该尽快执行的循环:
while(true)
{
A();
B();
C();
}
遵循以下规则:
B() 只能在 A() 完成后启动,C() 只能在 B() 完成后启动。
B() 具有很高的多线程潜力。
如果我在 B() 中创建新线程来拆分工作,与非并行解决方案相比,它的执行速度会更慢!
我想这是线程创建开销。
我创建了一个变体,其中 B() 的并行线程是在 while(true) 循环之外创建的。
每个线程都有一个布尔值来表示它已完成,每个线程都有一个布尔值来表示它有新的工作要做。
线程和 C() 正在通过以下 sn-p 等待它们的继续:
while(!boolean)
Thread.Sleep(1);
当 B() 的工作非常小时,这比其他变体慢。当 B() 具有预期的最大工作量时,它比其他变体更快。
这种布尔等待方法似乎非常低效和愚蠢......
threadInstance.Resume() 已弃用。
我很确定这是错误的方式。
我的问题的正确解决方案是什么?
我听说过线程池和任务。这是我应该研究的吗?
我避开了这些概念,因为我在阅读它们时无法快速理解它们。
【问题讨论】:
-
再次阅读线程池。线程池被用来重用线程。实际上,.NET 已经为您准备好了!
-
我避开了这些概念,因为我在阅读它们时无法快速理解它们。 “我想要一个高性能的多线程应用程序,我想轻松地做到这一点现在就想要,我想要一匹小马”
-
“我想这是线程创建开销。”分析比猜测可靠得多。
标签: c# .net multithreading concurrency