3

我在 IIS 中托管的 WCF 服务上使用 Parallel.ForEach。

据我所知,对于并行循环中的每个任务,都会打开线程。

但是 IIS 对可以打开的线程数有限制。我认为是20。

所以我的问题是:是否建议在 IIS 进程上使用 Parallel.ForEach?

4

1 回答 1

4

据我所知,在 IIS 中使用 TPL 时存在一些问题。

首先,IIS 对其线程池中的线程没有硬性限制。这实际上取决于线程在做什么(CPU 限制、IO 限制等)。因此,线程数本身并不重要。

其次,据我了解,TPL 将从线程池中获取线程。因此,实际上,您正在使用可用于服务请求的线程。同样,这可能很糟糕,具体取决于您消耗的流量。

第三,IIS 应用程序池会循环使用。当这种情况发生时,再次据我了解,IIS 将冻结线程的状态并将它们移动到另一个进程。这可能会对线程操作产生意想不到的影响。

通常,您希望使用 TPL ( Parallel.ForEach),因为您有一个长时间运行的进程。对于长时间运行的进程,最好调用另一台主机(Windows 服务)来完成繁重的工作。例如,在 Windows 服务中,您可以更好地控制管理线程的方式。

希望这可以帮助。

于 2012-08-08T08:56:50.680 回答