c# – 我们应该使用Windows服务还是线程池?

我们正在为数百名用户开发Asp.Net MVC 4中的Web应用程序.

我们需要为每个用户提供一个后台服务,以便在几分钟的时间内工作.

我们不确定是使用Windows服务(多个Windows服务)还是使用线程池进程.我们认为Windows服务可以通过Windows服务器轻松维护,这种方法可以节省编程UI和管理线程的开销.它也可以在一段时间内轻松运行.

Windows服务是否可以为刚刚注册的新用户自动启动新实例(因此我们有多个后台Windows服务实例,每个用户一个)?如果不是Windows服务选项.

如果可以使用上层,我们应该选择Windows服务方法还是制作我们自己的托管线程池进程?

最佳答案 当然,每个用户启动一个进程可以保证在进入1000s时你有很高的内存开销和不可扩展性.我没有看到启动进程(而不是线程)可以保存的是什么,因为新进程将包含至少一个线程.此外,Windows服务与“登录用户”无关.它们不是为多实例而制作的.

You seem to want to run background work in ASP.NET MVC.请注意,这很难.使用一个Windows服务可以在这里有意义.

后台工作的难点在于工作进程可以出于多种原因退出.你必须容忍这一点.服务具有相同的问题:您需要部署新版本并定期重新启动服务器.您还需要HA策略,因此您需要多个服务器.

即使是长时间运行的后台工作,我也不相信Windows服务会是更好的选择.

对于100个并发后台工作者,您应该使用异步IO来不拥有100个专用线程.

我假设你的背景工作大部分时间都在等待.您可以使等待异步(使用计时器)和其他所有同步.这为您提供了简单的实现,并大大节省了内存使用量.

点赞