我在IIS中托管的WCF服务上使用Parallel.ForEach。
据我所知,并行循环中的每个任务都会打开线程。
但是IIS对可以打开的线程的数量有限制。我认为是20岁。
所以我的问题是:它是否建议在IIS进程上使用Parallel.ForEach?
答案 0 :(得分:3)
据我所知,在IIS中使用TPL时存在一些问题。
首先,IIS对其线程池中的线程没有严格的限制。它实际上取决于线程正在做什么(CPU绑定,IO绑定等)。因此,线程数本身并不重要。
其次,据我所知,TPL将从线程池中获取线程。因此,实际上,您正在使用可用于服务请求的线程。同样,这可能会很糟糕,具体取决于您消耗的流量。
第三,IIS应用程序池将循环使用。当发生这种情况时,再次据我所知,IIS将冻结线程的状态并将它们移动到另一个进程。这可能会对线程操作产生意想不到的影响。
通常,您希望使用TPL(Parallel.ForEach
),因为您的运行时间很长。对于长时间运行的进程,最好调用另一台主机(Windows服务)来完成繁重的工作。例如,在Windows服务中,您可以更好地控制管理线程的方式。
希望这有帮助。