【发布时间】:2014-04-16 06:28:59
【问题描述】:
线程池线程是重要的可重用线程(例如在 asp.net 中)- 有助于处理请求。
相对于原语new Thread().start(....),它不使用线程池线程,并且不支持取消标记、连续性、结果值——毫无疑问,TPL 是首选策略。
但问题是Task 也是 uses 线程池线程。
在 TPL 中,TaskScheduler 负责实际对任务进行排队 准备执行。默认调度程序将使用线程池。
这让我想知道:
假设我有一个有许多并发用户的站点,我需要为每个用户执行 3 个计算绑定任务(非 IO)。
我担心线程池将没有线程剩余(因为我将通过使用线程池线程的 TASK 执行 3 个计算操作(针对每个用户)。 - 这将导致创建新的线程池线程。
这使我得出结论,当我需要可扩展性时 - 最好使用旧时尚 new Thread().start(...) ?
我错过了什么?我们回到原点了吗?
【问题讨论】:
-
我会考虑将这些任务放到另一个进程中,这样你就不会饿死asp.net。新进程 = 新的线程池线程集,在该进程中,它们将专用于这些任务。因此,例如,Windows 服务和从网站到服务的某种形式的进程间通信。
-
但是控制线程池比控制您创建的线程数要容易得多。如果您创建大量线程,您可能会获得更差的性能。
-
@Damien_The_Unbeliever 什么 ipc 通信?插座 ?嗯?我不想为此使用 wcf。最快的方法是什么?你能提供链接吗?
标签: c# multithreading .net-4.0 task-parallel-library