【问题标题】:Multi Thread vs Single Thread with Asp.net 3.5使用 Asp.net 3.5 的多线程与单线程
【发布时间】:2011-09-23 02:59:13
【问题描述】:
我目前正在使用一个 Web 应用程序,它有一个使用 .net 类实现的定制工作流。在该工作流程中,我们更新一些数据库值并根据某些业务逻辑向用户发送电子邮件。
系统有 400 个并发用户和 10000 个用户群,用户可以创建最多 52 个采购请求行的采购请求。此应用程序中的平均采购请求数据负载为 10 分钟内的 10 -15 个采购请求。用户使用使用 ASP.net 3.5 实现的 Web 应用程序执行一些操作,并且基于用户输入将需要执行工作流。
我的问题是由于我们的工作量大,
我们正在尝试在 UI 线程之外的单独线程中执行工作流。这是一个好的决定还是工作流应该在同一个 UI 线程上运行?
【问题讨论】:
标签:
.net
asp.net
multithreading
【解决方案1】:
上次我不得不在类似的场景中工作时,我们实际上将工作流作为与 UI 完全分离的应用程序。我们这样做的原因是,如果 UI 上出现故障,它不会影响我们的工作流程,反之亦然。那个单独的应用程序也是多线程的。经过一些工作后,我被排除在项目之外,但我知道我的同事在这方面做了更多工作,他甚至添加了一些同时工作的额外控制台应用程序。你永远不能太小心。
【解决方案2】:
在处理 Web 应用程序时,您必须牢记关于线程的事情是“此任务是否需要很长时间才能完成”。如果不是,则没有理由分拆线程。线程不会神奇地让您的应用程序运行得更快,尤其是在您无论如何都必须等待结果的情况下。
如果工作确实需要大量时间,那么转入后台线程将允许 IIS 工作进程被回收并接受新的传入请求。
分离更多线程实际上会导致系统负载增加,因为您现在启动的线程数量是原来的 2 倍,每个线程都有自己的堆栈和其他资源。只有在您从中获得实际收益时才有意义。