我们正在为数百名用户开发 Asp.Net MVC 4 网络应用程序。
我们需要有一个后台服务每个用户以几分钟的间隔工作。
我们不确定是使用 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 多个线程的专用。
我假设您的后台工作大部分时间都在等待。您可以使等待异步(使用计时器)和所有其他同步。这为您提供了一个简单的实现并大大节省了内存使用量。
关于c# - 我们应该使用 Windows 服务还是线程池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24486409/