我推断由于 ASP.NET Web 应用程序被授予固定数量的工作线程和 I/O 线程,这由<processModel>
web.config 文件中的设置控制,因此,对于具有大量用户的大型网站,有旋转新的工作线程或使用 .NET 线程池中的线程来执行诸如记录错误或发送电子邮件等任务并没有什么特别的好处。
换句话说,假设在我的web应用程序中,对于每一个进来的请求,request handler连续执行3个任务,分别是Task A,接着是Task B,接着是Task C,然后返回结果,也就是一个 HTML 页面。
但是,在这三个任务中,任务 B 与生成的 HTML 没有任何关系。它可能是一项任务,例如在日志文件中记录一段文本。
然后,如果我将任务 B 移动到另一个工作线程,同时CurrentThread
也是 ASP.NET 工作线程池中的工作线程,它将返回更快,并为我的应用程序的用户带来更好的响应时间,我的应用程序可以服务的并发用户将受到影响,因为任务 B 将需要从同一个 ASP.NET 工作线程池中分配新的工作线程。
因此,在 Web 应用程序场景中,我的理解是否正确:分叉新线程将对性能产生积极影响,但会对可伸缩性产生不利影响。因此,如果我们有幸通过购买大量硬件进行横向扩展,我们是否必须只编写多线程服务器端代码?
如果不是,那么我们只是用一个换另一个?