【发布时间】:2016-05-30 06:48:45
【问题描述】:
我们正在开发一个应用程序,该应用程序需要根据参数值的变化非常频繁地执行某些小操作(表达式评估)。为了执行这些小操作,我们正在创建执行评估和终止的线程。我的问题是,创建大量线程对性能的影响将是非常小的生命周期。假设每秒 100 到 200 个线程,其生命周期不会超过一秒。
线程池的问题是某些操作由于后台线程不可用而不得不等待。这就是为什么在需要时切换到创建新线程的原因。
任何人都可以分享一些关于这种情况下性能影响的见解,并建议是否有更好的方法来实现这一点。谢谢
【问题讨论】:
-
除非您有 100-200 个内核(并且工作受 CPU 限制 - 看起来确实如此),否则绝对没有理由拥有这么多线程。
-
一方面,从头开始开始一个新线程而不是获取一个warm-ready-to-go线程是有成本的来自 .NET 线程池的好东西。如果您的工作时间很短(就像您的情况一样),这笔费用会变得相对昂贵
-
@Rob 为 GPU 编码可以有这个用例吗?
-
你反对胎面池的论点是有缺陷的。为每个操作启动一个线程并不能使工作更快地完成。
-
“线程池的问题是某些操作由于后台线程不可用而不得不等待。”线程不会神奇地使您的 16 核处理器能够同时执行 200 个操作。如果您有其他可能运行更长时间并阻止您的小操作的任务,我会考虑一个单独的线程池。
标签: c# multithreading performance